# include<stdioh>
# include <conioh>
# include <graphicsh>
# include <timeh>
# pragma comment(lib,”Winmmlib”) //引用Windows Multimedia APT
int score =0; //全局变量整型的分数
char s[5]; //全局变量字符型的分数
struct player_ //自定义的结构体,并顺便定义一个结构体变量
{
char name[20];
int score_;
}player[11];
/函数声明/
void record_(); //记录彼此成绩函数
void welcome( ); //欢迎界面函数
void instructions( ); //游戏说明界面函数
void gane (int rank2); //游戏函数
void record ( ); //显示记录函数
int rank_(char rank1); //等级选择函数
void goodbye ( ); //退出界面函数
/主函数/
int main ()
{
char rank1; //rank1接受从键盘输入的字符,根据字符判断等级
int rank2=15; // 控制延时时间,从而控制速度
intsign=1; // 当做标记,用于标记是否d出MessageBox对话框
welcome ( ); //调用欢迎界面函数
instructions ( ); //调用游戏什么函数
record( ); //调用显示记录函数
InputBox(player[10]name,20,"请输入玩家昵称"; //以对话框形式获取用户输入函数
rank1=getch();//读入一个字母
rank2=rank_(rank1); //调用等级函数
game (rank2); //调用游戏函数
HWND wnd =GetHWnd();
while (sign) //sign作为标记,执行循环
if (MessageBox(wnd,"游戏结束!!!\n再来一局,挑战更高分数","询问",MB_YESNO|MB_ICONQUESTION)==IDYES)
game (rank2);
else
{
sign=0;
goodbye( );
}
closegraph( );
return 0;
}
/记录本次成绩函数/
void record_()
{
FILEfp; //文件指针
int i,j;
struct player_t; //定义结构体变量t,冒泡法比较大小时用
player[10]score_=score; //把该局的分数赋给该局用户的结构体变量中
fp=fopen("记录dat","rb"); //打开二进制文件
for (i=0;i<10;i++)
{
fread(player[i]name,20,l,fp); //读入记录中的成绩和名字
fread (&player[i]score_,4,l,fp);
}
fclose(fp); //关闭二进制文件
for (j=0;j<10;j++) //冒泡法排序
for (i=0;i<10-j;i++)
if (player[i]score_)
{
t=player[i];
player[i]=player[i+1];
player[i+1]=t;
}
fp=fopen("记录dat","wb"); //打开文件
for (i=0;i<10;i++) //把排好序列的数据存入记录文件
{
fwrite(player[i]name,20,l,fp);
fwrite (&player[i]score_,4,l,fp);
}
fclose(fp); //关闭文件
}
/欢迎界面函数/
void welcome ( )
{
char ch;
mciSendString("open\"res\\Sleep Awaymp3\"alias mymusic",NULL,0,NULL);
initgraph(640,480); //初始化画图界面
IMAGE img; //定义IMAGE对象
loadimage (&img,"res\\00jpg"); //读取到img对象中
putimage (0,0,&img); //在坐标(0,0)位置显示IMAGE对象
ch=getch(); //吸收掉一个按键
cleardevice(); //清屏
}
/游戏说明界面函数/
void instructions()
{
int c=255; //控制变色的变量
setcolor(YELLOW); //设置颜色
setfont (30,0,"黑体"); //设置字体
outtextxy(0,0,"游戏说明"); //输出文字
setcolor(WHITE);
setfont(28,0,"宋体");
outtextxy(0,30,"一、每次游戏下落200个字母"); //输出文字
outtextxy(0,58,"二、请按数字键选择游戏等级");
outtextxy(0,86,"三、统计被击中的个数");
setfont(30,0,"华文行楷")
outtextxy (20,220,"等级一二三四 五六七八九");
outtextxy(20,260,“按键 1 2 3 4 5 6 7 8 9”);
while (!kbhit()) //kihit()作用是判断是否有字幕输入
{
setcolor(RGB(c,255,0));
setfont (80,0,"楷体");
outtextxy(140,130,"请选择等级");
setcolor(RGB(c,0,255));
setfont(100,0,"Wickenden Cafe NDP");
outtextxy(100,135,"Let's go!!!");
c-=25; //控制颜色的变量自减
if(c<0)c=255; //控制颜色的变量小于0时,再把255赋给c
cleardevice(); //清屏
}
/退出界面函数/
void goodbye()
{
int c=255; //控制变色变量
cleardevice(); //清屏
setcolor(YELLOW);
setfont (48,0,"黑体");
outtextxy (104,120,"的最终成绩是: ");
setfont (48,0,"华文楷体");
setcolor(RGB(255,255,0));
outtextxy(140,320,"按任意键退出游戏");
setcolor(YELLOW);
setfont(48,0,"黑体");
outtextxy (104,120,"的最终成绩是: ");
outtextxy(104,70,player[10]name);
record_(); //调用记录本次成绩函数
while(!kbhit())
{
setcolor(RGB(255,0,c-100)); //设置颜色
setfont(100,0,”Wickenden Café NDP”);
outtextxy(400,90,s); //输出数字
setcolor(RGB(c,0,255));
setfont(48,0,”黑体”);
if (score==200)
outtextxy(100,200,”全部击中!!!”);
else
if(score>190)
outtextxy(100,200,”不错!继续加油!”);
else
outtextxy(100,200,”不要灰心!继续加油!”);
c-=25;
if(c<0)
c=255;
Sleeep(20); //延时20秒
}
getch( ); //提供给用户时需要等待输入后再退出
}
/等级选择函数/
int rank_(char rank1)
{
int rank2;
switch(rank1) //判断字符,确定等级
{
case’0’:rank2=11;break;
case’1’:rank2=10;break;
case’2’:rank2=9;break;
case’3’:rank2=8;break;
case’4’:rank2=7;break;
case’5’:rank2=6;break;
case’6’:rank2=5;break;
case’7’:rank2=4;break;
case’8’:rank2=3;break;
case’9’:rank2=2;break;
default:rank2=15;break;
}
return rank2;
}
/显示记录函数/
void record( )
{
FILE p; //文件指针
int a[10],j;
char b[10][10];
fp=fopen(“记录。dat”,”rb”); //打开文件
for (j=0;j<10;j++)
{
fread(player[j]name,20,1,fp); //读取文件中的信息
fread(&player[j]score_,4,1,fp);
}
fclose(fp); //关闭文件
setfont(60,0,”Arial”);
setcolor(RGB(250,250,0));
outtextxy(250,0,”TOP10”);
for(j=0;j<10;j++)
{
sprintf(“b[j],%d”,player[j]score_); //把整型转换为字符型
setcolor(RGB(0,100,255));
setfont(40,0,”Arial”);
outtextxy(420,50+40j,b[j]);
outtextxy(120,50+40j,player[j]name); //输出名字
/游戏函数/
void game (int rank2)
{
cleardevice( ); //清屏
score=0; //清除掉原有的分数
outtextxy(0,0,”玩家:”);
outtextxy(90,0,player[10]name);
setfont(20,0,”Arial”);
outtextxy(100,460,” 人生有享受片刻优雅恬适的权力,让打字母游戏放松你一下吧!”);
int i;
char target; //目标字母
char key; //用户的按键
intx,y; //字母的位置
int flag =1; //标记是否按了退出键
int sum=0; //成绩计数
int num =200; //规定下落字母的个数
srand (time(NULL)); //随机时间种子,设置第一个随机函数的值
setfillstyle(BLACK); //设置下面矩形内图的颜色
setcolor(YELLOW); //
line(0,450,640,450); //用3条线规定一下工作区
line(0,440,640,440); //用3条线规定一下工作区
line(0,40,640,40); //用3条线规定一下工作区
while (flag&&num)
{
setfont(40,0,”宋体”); //设置字母的字体和大小
i=rand()%2; //rand()函数返回0~32767之间的一个整数
if(i)
target=97+rand()%26; //产生任意小写字母
else
target=65+rand()%26; //产生任意大写字母
x=rand()%610; //产生任意下落位置
for (y=41;y<380;y++)
{
setcolor (RGB(255,0,255));
outtextxy(x,y,target); //显示字母
if(kbhit())
{
key=getch(); //获取用户按键
if ((key==target)||( key==target-32)||( key==target+32))
{
score++; //分数统计
sprintf(s,”%d”score);
setfont(30,0,”Arial”);
outtextxy(500,0,“分数”);
outtextxy(600,0,s); //输出分数
bar(x-10,y-10,x+35,y+50); // 击中用黑框形擦去字母
break; //跳出循环,进行下一个字母
}
else if (key==27) //判断是否按了
{
flag=0; //若果按ESC,退出游戏主循环
break;
}
}
Sleep(rank2); //控制清除字母的时间爱你也就是控制下落速度
bar(x,y,x+35,y+60); //擦最下面的字符
}
num--; //计数
}
}
“贪吃蛇”C代码:
#include <stdioh>
#include <stdlibh>
#include <conioh>
#include <timeh>
#include <Windowsh>
#define W 78 //游戏框的宽,x轴
#define H 26 //游戏框的高,y轴
int dir=3; //方向变量,初值3表示向“左”
int Flag=0; //吃了食物的标志(1是0否)
int score=0; //玩家得分
struct food{ int x; //食物的x坐标
int y; //食物的y坐标
}fod; //结构体fod有2个成员
struct snake{ int len; //身长
int speed; //速度
int x[100];
int y[100];
}snk; //结构体snk有4个成员
void gtxy( int x,int y) //控制光标移动的函数
{ COORD coord;
coordX=x;
coordY=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void gtxy( int x,int y); //以下声明要用到的几个自编函数
void csh( ); //初始化界面
void keymove( ); //按键 *** 作移动蛇
void putFod( ); //投放食物
int Over( ); //游戏结束(1是0否)
void setColor(unsigned short p, unsigned short q); //设定显示颜色
int main( ) //主函数
{ csh( );
while(1)
{ Sleep(snkspeed);
keymove( );
putFod( );
if(Over( ))
{system(“cls”);
gtxy(W/2+1,H/2); printf(“游戏结束!T__T”);
gtxy(W/2+1,H/2+2); printf(“玩家总分:%d分”,score);
getch( );
break;
}
}
return 0;
}
void csh( ) //初始化界面
{ int i;
gtxy(0,0);
CONSOLE_CURSOR_INFO cursor_info={1,0}; //以下两行是隐藏光标的设置
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
for(i=0;i<=W;i=i+2) //横坐标要为偶数,因为这个要打印的字符占2个位置
{ setColor(2, 0); //设定打印颜色为绿字黑底
gtxy(i,0); printf("■"); //打印上边框
gtxy(i,H); printf("■"); //打印下边框
}
for(i=1;i<H;i++)
{ gtxy(0,i); printf("■"); //打印左边框
gtxy(W,i); printf("■"); //打印右边框
}
while(1)
{ srand((unsigned)time(NULL)); //初始化随机数发生器srand( )
fodx=rand()%(W-4)+2; //随机函数rand( )产生一个从0到比”(W-4)”小1的数再加2
fody=rand()%(H-2)+1; //随机函数rand( )产生一个从0到比”(H-2)”小1的数再加1
if (fodx%2==0) break; //fodx是食物的横坐标,要是2的倍数(为偶数)
}
setColor(12, 0); //设定打印颜色为淡红字黑底
gtxy(fodx,fody); printf("●"); //到食物坐标处打印初试食物
snklen=3; //蛇身长
snkspeed=350; //刷新蛇的时间,即是移动速度
snkx[0]=W/2+1; //蛇头横坐标要为偶数(因为W/2=39)
snky[0]=H/2; //蛇头纵坐标
setColor(9, 0); //设定打印颜色为淡蓝字黑底
gtxy(snkx[0], snky[0]); printf("■"); //打印蛇头
for(i=1;i<snklen;i++)
{ snkx[i]=snkx[i-1]+2; snky[i]=snky[i-1];
gtxy(snkx[i],snky[i]); printf("■"); //打印蛇身
}
setColor(7, 0); //恢复默认的白字黑底
return;
}
void keymove( ) //按键 *** 作移动蛇
{ int key;
if( kbhit( ) ) //如有按键输入才执行下面 *** 作
{ key=getch( );
if (key==224) //值为224表示按下了方向键,下面要再次获取键值
{ key=getch( );
if(key==72&&dir!=2)dir=1; //72表示按下了向上方向键
if(key==80&&dir!=1)dir=2; //80为向下
if(key==75&&dir!=4)dir=3; //75为向左
if(key==77&&dir!=3)dir=4; //77为向右
}
if (key==32)
{ while(1) if((key=getch( ))==32) break; } //32为空格键,这儿用来暂停
}
if (Flag==0) //如没吃食物,才执行下面 *** 作擦掉蛇尾
{ gtxy(snkx[snklen-1],snky[snklen-1]); printf(" "); }
int i;
for (i = snklen - 1; i > 0; i--) //从蛇尾起每节存储前一节坐标值(蛇头除外)
{ snkx[i]=snkx[i-1]; snky[i]=snky[i-1]; }
switch (dir) //判断蛇头该往哪个方向移动,并获取最新坐标值
{ case 1: snky[0]--; break; //dir=1要向上移动
case 2: snky[0]++; break; //dir=2要向下移动
case 3: snkx[0]-=2; break; //dir=3要向左移动
case 4: snkx[0]+=2; break; //dir=4要向右移动
}
setColor(9, 0);
gtxy(snkx[0], snky[0]); printf("■"); //打印蛇头
if (snkx[0] == fodx && snky[0] == fody) //如吃到食物则执行以下 *** 作
{ printf("\007"); snklen++; score += 100; snkspeed -= 5; Flag = 1; } //007是响铃
else Flag = 0; //没吃到食物Flag的值为0
if(snkspeed<150) snkspeed= snkspeed+5; //作弊码,不让速度无限加快
}
void putFod( ) //投放食物
{ if (Flag == 1) //如吃到食物才执行以下 *** 作,生成另一个食物
{ while (1)
{ int i,n= 1;
srand((unsigned)time(NULL)); //初始化随机数发生器srand( )
fodx = rand( ) % (W - 4) + 2; //产生在游戏框范围内的一个x坐标值
fody = rand( ) % (H - 2) + 1; //产生在游戏框范围内的一个y坐标值
for (i = 0; i < snklen; i++) //随机生成的食物不能在蛇的身体上
{ if (fodx == snkx[i] &&fody == snky[i]) { n= 0; break;} }
if (n && fodx % 2 == 0) break; //n不为0且横坐标为偶数,则食物坐标取值成功
}
setColor(12, 0);
gtxy(fodx, fody); printf("●"); //光标到取得的坐标处打印食物
}
return;
}
int Over( ) //判断游戏是否结束的函数
{ int i;
setColor(7, 0);
gtxy(2,H+1); printf(“暂停键:space”); //以下打印一些其它信息
gtxy(2,H+2); printf(“游戏得分:%d”,score);
if (snkx[0] == 0 || snkx[0] == W) return 1; //蛇头触碰左右边界
if (snky[0] == 0 || snky[0] == H) return 1; //蛇头触碰上下边界
for (i = 1; i < snklen; i++)
{ if (snkx[0] == snkx[i] && snky[0] == snky[i]) return 1; } //蛇头触碰自身
return 0; //没碰到边界及自身时就返回0
}
void setColor(unsigned short ForeColor = 7, unsigned short BackGroundColor = 0)
{ HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute( handle, ForeColor + BackGroundColor 0x10 );
} //用来设定颜色的函数
/贪吃蛇/
#include<stdioh>
#include<timeh>
#include<conioh>
#include<stdlibh>
inthead=3,tail=0;
intmain()
{
inti,j,k=0;
intzuobiao[2][80];
longstart;
intdirection=77;
intgamespeed;
inttimeover;
intchange(charqipan[20][80],
intzuobiao[2][80],
chardirection);
zuobiao[0][tail]=1;
zuobiao[1][tail]=1;
zuobiao[0][1]=1;
zuobiao[1][1]=2;zuobiao[0
[2]=1;
zuobiao[1][2]=3;
zuobiao[0][head]=1;
zuobiao[1][head]=4;
/处理棋盘/
charqipan[20][80];
//定义棋盘
for(i=0;i<20;i++)
for(j=0;j<80;j++)
qipan[i][j]='';//初始化棋盘
for(i=0;i<80;i++)
qipan[0][i]='_';
for(i=0;i<20;i++)
qipan[i][0]='|';
for(i=0;i<20;i++)
qipan[i][79]='|';
for(i=0;i<80;i++)
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
以上就是关于用C语言编写一个简单的打字母游戏,给出基本思路及完整程序。全部的内容,包括:用C语言编写一个简单的打字母游戏,给出基本思路及完整程序。、怎样用C语言编写一个小游戏、用C语言编写的小游戏代码是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)