c语言编程游戏代码大全(c语言程序游戏代码)

http://www.itjxue.com  2023-03-07 03:24  来源:未知  点击次数: 

c语言小游戏代码

最基础的贪吃蛇的代码

#includestdio.h

#includewindows.h//基本型态定义。支援型态定义函数。使用者界面函数 图形装置界面函数。

#includeconio.h //用户通过按键盘产生的对应操作 (控制台)

#includestdlib.h

#includetime.h //日期和时间头文件

#define LEN 30

#define WID 25

int Snake[LEN][WID] = {0}; //数组的元素代表蛇的各个部位

char Sna_Hea_Dir = 'a';//记录蛇头的移动方向

int Sna_Hea_X, Sna_Hea_Y;//记录蛇头的位置

int Snake_Len = 3;//记录蛇的长度

clock_t Now_Time;//记录当前时间,以便自动移动

int Wait_Time ;//记录自动移动的时间间隔

int Eat_Apple = 1;//吃到苹果表示为1

int Level ;

int All_Score = -1;

int Apple_Num = -1;

HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); //获取标准输出的句柄 windows.h

//句柄 :标志应用程序中的不同对象和同类对象中的不同的实例 方便操控,

void gotoxy(int x, int y)//设置光标位置

{

COORD pos = {x,y}; //定义一个字符在控制台屏幕上的坐标POS

SetConsoleCursorPosition(hConsole, pos); //定位光标位置的函数windows.h

}

void Hide_Cursor()//隐藏光标 固定函数

{

CONSOLE_CURSOR_INFO cursor_info = {1, 0};

SetConsoleCursorInfo(hConsole, cursor_info);

}

void SetColor(int color)//设置颜色

{

SetConsoleTextAttribute(hConsole, color);

//是API设置字体颜色和背景色的函数 格式:SetConsoleTextAttribute(句柄,颜色);

}

void Print_Snake()//打印蛇头和蛇的脖子和蛇尾

{

int iy, ix, color;

for(iy = 0; iy WID; ++iy)

for(ix = 0; ix LEN; ++ix)

{

if(Snake[ix][iy] == 1)//蛇头

{

SetColor(0xf); //oxf代表分配的内存地址 setcolor:34行自定义设置颜色的函数

gotoxy(ix*2, iy);

printf("※");

}

if(Snake[ix][iy] == 2)//蛇的脖子

{

color = rand()%15 + 1; //rand()函数是产生随机数的一个随机函数。C语言里还有 srand()函数等。

//头文件:stdlib.h

if(color == 14)

color -= rand() % 13 + 1; //变色

SetColor(color);

gotoxy(ix*2, iy);

printf("■");

}

if(Snake[ix][iy] == Snake_Len)

{

gotoxy(ix*2, iy);

SetColor(0xe);

printf("≈");

}

}

}

void Clear_Snake()//擦除贪吃蛇

{

int iy, ix;

for(iy = 0; iy WID; ++iy)

for(ix = 0; ix LEN; ++ix)

{

gotoxy(ix*2, iy);

if(Snake[ix][iy] == Snake_Len)

printf(" ");

}

}

void Rand_Apple()//随机产生苹果

{

int ix, iy;

do

{

ix = rand() % LEN;

iy = rand() % WID;

}while(Snake[ix][iy]);

Snake[ix][iy] = -1;

gotoxy(ix*2, iy);

printf("⊙");

Eat_Apple = 0;

}

void Game_Over()//蛇死掉了

{

gotoxy(30, 10);

printf("Game Over");

Sleep(3000);

system("pause nul");

exit(0);

}

void Move_Snake()//让蛇动起来

{

int ix, iy;

for(ix = 0; ix LEN; ++ix)//先标记蛇头

for(iy = 0; iy WID; ++iy)

if(Snake[ix][iy] == 1)

{

switch(Sna_Hea_Dir)//根据新的蛇头方向标志蛇头

{

case 'w':

if(iy == 0)

Game_Over();

else

Sna_Hea_Y = iy - 1;

Sna_Hea_X = ix;

break;

case 's':

if(iy == (WID -1))

Game_Over();

else

Sna_Hea_Y = iy + 1;

Sna_Hea_X = ix;

break;

case 'a':

if(ix == 0)

Game_Over();

else

Sna_Hea_X = ix - 1;

Sna_Hea_Y = iy;

break;

case 'd':

if(ix == (LEN - 1))

Game_Over();

else

Sna_Hea_X = ix + 1;

Sna_Hea_Y = iy;

break;

default:

break;

}

}

if(Snake[Sna_Hea_X][Sna_Hea_Y]!=1Snake[Sna_Hea_X][Sna_Hea_Y]!=0Snake[Sna_Hea_X][Sna_Hea_Y]!=-1)

Game_Over();

if(Snake[Sna_Hea_X][Sna_Hea_Y] 0)//吃到苹果

{

++Snake_Len;

Eat_Apple = 1;

}

for(ix = 0; ix LEN; ++ix)//处理蛇尾

for(iy = 0; iy WID; ++iy)

{

if(Snake[ix][iy] 0)

{

if(Snake[ix][iy] != Snake_Len)

Snake[ix][iy] += 1;

else

Snake[ix][iy] = 0;

}

}

Snake[Sna_Hea_X][Sna_Hea_Y] = 1;//处理蛇头

}

void Get_Input()//控制蛇的移动方向

{

if(kbhit())

{

switch(getch())

{

case 87:

Sna_Hea_Dir = 'w';

break;

case 83:

Sna_Hea_Dir = 's';

break;

case 65:

Sna_Hea_Dir = 'a';

break;

case 68:

Sna_Hea_Dir = 'd';

break;

default:

break;

}

}

if(clock() - Now_Time = Wait_Time)//蛇到时间自动行走

{

Clear_Snake();

Move_Snake();

Print_Snake();

Now_Time = clock();

}

}

void Init()//初始化

{

system("title 贪吃毛毛蛇");

system("mode con: cols=80 lines=25");

Hide_Cursor();

gotoxy(61, 4);

printf("You Score:");

gotoxy(61, 6);

printf("You Level:");

gotoxy(61, 8);

printf("The Lenght:");

gotoxy(61, 10);

printf("The Speed:");

gotoxy(61, 12);

printf("Apple Num:");

int i;

for(i = 0; i Snake_Len; ++i)//生成蛇

Snake[10+i][15] = i+1;

int iy, ix;//打印蛇

for(iy = 0; iy WID; ++iy)

for(ix = 0; ix LEN; ++ix)

{

if(Snake[ix][iy])

{

SetColor(Snake[ix][iy]);

gotoxy(ix*2, iy);

printf("■");

}

}

}

void Pri_News()//打印信息

{

SetColor(0xe);

gotoxy(73,4);

All_Score += Level;

printf("%3d", All_Score);

gotoxy(73, 6);

printf("%3d", Level);

gotoxy(73, 8);

printf("%3d",Snake_Len);

gotoxy(73, 10);

printf("0.%3ds", Wait_Time/10);

gotoxy(73, 12);

printf("%d", Apple_Num);

}

void Lev_Sys()//等级系统

{

if(((Apple_Num-1) / 10) == Level)

{

++Level;

if(Wait_Time 50)

Wait_Time -= 50;

else

if(Wait_Time 10)

Wait_Time -= 10;

else

Wait_Time -= 1;

}

}

int main(void)

{

Init();

srand((unsigned)time(NULL));//设置随机数的种子

Now_Time = clock();

int speed1=1000,speed2,a;

printf("\n");

printf("请输入你想要的速度\n");

scanf("%d",speed2);

Level=1;

Wait_Time=speed1-speed2;

printf("请输入你想要的苹果数\n");

scanf("%d",a);

while(a--)

Rand_Apple();

while(1)

{

if(Eat_Apple)

{

++Apple_Num;

Rand_Apple();

Lev_Sys();

Pri_News();

}

Get_Input();

Sleep(10);

}

return 0;

}

俄罗斯方块C语言代码

俄罗斯方块C源代码

#include?stdio.h

#include?windows.h

#include?conio.h

#include?time.h

#define??ZL??4 ? ? //坐标增量,?不使游戏窗口靠边

#define?WID??36 ?? //游戏窗口的宽度

#define?HEI??20 ?? //游戏窗口的高度

int?i,j,Ta,Tb,Tc; ? ?? //?Ta,Tb,Tc用于记住和转换方块变量的值

int?a[60][60]={0}; ?? //标记游戏屏幕各坐标点:0,1,2分别为空、方块、边框

int?b[4]; ? ? ?? //标记4个"口"方块:1有,0无,类似开关

int?x,y,?level,score,speed; ?? //方块中心位置的x,y坐标,游戏等级、得分和游戏速度

int?flag,next; ? //当前要操作的方块类型序号,下一个方块类型序号

void?gtxy(int?m,?int?n); ? //以下声明要用到的自编函数

void?gflag(?);? //获得下一方块序号

void?csh(?);? //初始化界面

void?start(?);? //开始部分

void?prfk?(?);? //打印方块

void?clfk(?);? //清除方块

void?mkfk(?);? //制作方块

void?keyD(?);? //按键操作

int??ifmov(?);? //判断方块能否移动或变体

void clHA(?);? //清除满行的方块

void?clNEXT(?);? //清除边框外的NEXT方块

int?main(?)

{?csh(?); ??

?? while(1)

? ?? {start(?);??//开始部分

? ? ?? while(1)

? ? ?? {?prfk(?);??

? ? ? ?? Sleep(speed);? //延时

? ? ? ? ? clfk(?);

? ? ? ? ? Tb=x;Tc=flag;??//临存当前x坐标和序号,以备撤销操作

? ? ? ? ? keyD(?); ?

? ? ? ? ? y++;?????//方块向下移动

? ? ? ?? if?(ifmov(?)==0)?{?y--;?prfk(?);?dlHA(?);?break;}?//不可动放下,删行,跨出循环

? ? ?? }

? ? ? for(i=y-2;iy+2;i++){?if?(i==ZL)?{?j=0;?}?}? //方块触到框顶

? ?? if?(j==0)?{?system("cls");gtxy(10,10);printf("游戏结束!");?getch();?break;?}?

? ?? clNEXT(?); ? //清除框外的NEXT方块

? ? }

? return?0;

}

void?gtxy(int?m,?int?n)??//控制光标移动

{COORD?pos;??//定义变量

pos.X?=?m;??//横坐标

pos.Y?=?n;???//纵坐标

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),?pos);

}

void?csh(?)????//初始化界面

{gtxy(ZL+WID/2-5,ZL-2);?printf("俄罗斯方块");??????//打印游戏名称

gtxy(ZL+WID+3,ZL+7);?printf("*******?NEXT:");??//打印菜单信息

gtxy(ZL+WID+3,ZL+13);?printf("**********");

gtxy(ZL+WID+3,ZL+15);?printf("Esc?:退出游戏");

gtxy(ZL+WID+3,ZL+17);?printf("↑键:变体");

gtxy(ZL+WID+3,ZL+19);?printf("空格:暂停游戏");

gtxy(ZL,ZL);??printf("╔");??gtxy(ZL+WID-2,ZL);??printf("╗");??//打印框角

gtxy(ZL,ZL+HEI);??printf("╚");??gtxy(ZL+WID-2,ZL+HEI);??printf("╝");

a[ZL][ZL+HEI]=2;??a[ZL+WID-2][ZL+HEI]=2;??//记住有图案

for(i=2;iWID-2;i+=2)?{gtxy(ZL+i,ZL);??printf("═");?}??//打印上横框

for(i=2;iWID-2;i+=2)?{gtxy(ZL+i,ZL+HEI);?printf("═");?a[ZL+i][ZL+HEI]=2;?}?//下框

for(i=1;iHEI;i++)?{?gtxy(ZL,ZL+i);??printf("║");?a[ZL][ZL+i]=2;?}??//左竖框记住有图案

for(i=1;iHEI;i++)?{gtxy(ZL+WID-2,ZL+i);?printf("║");?a[ZL+WID-2][ZL+i]=2;?}?//右框

CONSOLE_CURSOR_INFO?cursor_info={1,0};???//以下是隐藏光标的设置

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),cursor_info);

level=1;?score=0;?speed=400;

gflag(?);??flag=next;??//获得一个当前方块序号

}

void?gflag(?) ? //获得下一个方块的序号

{?srand((unsigned)time(NULL));?next?=?rand()%19+1; }

void?start(?)??//开始部分

{?gflag(?);?Ta=flag;?flag=next;??//保存当前方块序号,将下一方块序号临时操作

x=ZL+WID+6;?y=ZL+10;?prfk(?);??//给x,y赋值,在框外打印出下一方块

flag=Ta;?x=ZL+WID/2;?y=ZL-1;??//取回当前方块序号,并给x,y赋值

}

void?prfk?(?)??//打印俄罗斯方块

{?for(i=0;i4;i++)?{b[i]=1;?}??//数组b[4]每个元素的值都为1

mkfk?(?);??//制作俄罗斯方块

for(?i=?x-2;?i=x+4;?i+=2?)??//打印方块

{?for(j=y-2;j=?y+1;j++)?{?if(?a[i][j]==1??jZL?){?gtxy(i,j);?printf("□");?}?}?}

gtxy(ZL+WID+3,ZL+1); ? printf("level?:?%d",level); ?//以下打印菜单信息

gtxy(ZL+WID+3,ZL+3);? printf("score?:?%d",score);

gtxy(ZL+WID+3,ZL+5);? printf("speed?:?%d",speed);

}

void?clfk(?)??//清除俄罗斯方块

{?for(i=0;i4;i++)?{?b[i]=0;?}??//数组b[4]每个元素的值都为0

mkfk?(?);??//制作俄罗斯方块

for(?i=x-2;?i=x+4;?i+=2?)??//清除方块

{?for(j=y-2;j=y+1;j++){?if(?a[i][j]==0??jZL?){?gtxy(i,j);?printf("??");?}?}?}

}

void?mkfk(?)??//制作俄罗斯方块

{?a[x][?y]=b[0];??//方块中心位置状态:?1-有,0-无

switch(flag)???//共6大类,19种小类型

{?case?1:?{?a[x][y-1]=b[1];?a[x+2][y-1]=b[2];?a[x+2][y]=b[3];?break;?}??//田字方块

case?2:?{?a[x-2][y]=b[1];?a[x+2][y]=b[2];?a[x+4][y]=b[3];?break;?}??//直线方块:----

case?3:?{?a[x][y-1]=b[1];?a[x][y-2]=b[2];?a[x][y+1]=b[3];?break;?}??//直线方块:?|

case?4:?{?a[x-2][y]=b[1];?a[x+2][y]=b[2];?a[x][y+1]=b[3];?break;?}??//T字方块

case?5:?{?a[x][y-1]=b[1];?a[x][y+1]=b[2];?a[x-2][y]=b[3];?break;?}??//T字顺时针转90度

case?6:?{?a[x][y-1]=b[1];?a[x-2][y]=b[2];?a[x+2][y]=b[3];?break;?}??//T字顺转180度

case?7:?{?a[x][y-1]=b[1];?a[x][y+1]=b[2];?a[x+2][y]=b[3];?break;?}??//T字顺转270度

case?8:?{?a[x][y+1]=b[1];?a[x-2][y]=b[2];?a[x+2][y+1]=b[3];?break;?}?//Z字方块

case?9:?{?a[x][y-1]=b[1];?a[x-2][y]=b[2];?a[x-2][y+1]=b[3];?break;?}??//Z字顺转90度

case?10:?{?a[x][y-1]=b[1];?a[x-2][y-1]=b[2];?a[x+2][y]=b[3];?break;?}??//Z字顺转180度

case?11:?{?a[x][y+1]=b[1];?a[x+2][y-1]=b[2];?a[x+2][?y]=b[3];?break;?}?//Z字顺转270度

case?12:?{?a[x][y-1]=b[1];?a[x][y+1]=b[2];?a[x-2][y-1]=b[3];?break;?}??//7字方块

case?13:?{a[x-2][y]=b[1];?a[x+2][y-1]=b[2];?a[x+2][y]=b[3];?break;?}??//7字顺转90度

case?14:?{?a[x][y-1]=b[1];?a[x][y+1]=b[2];?a[x+2][y+1]=b[3];?break;?}??//7字顺转180度

case?15:?{?a[x-2][y]=b[1];?a[x-2][y+1]=b[2];?a[x+2][y]=b[3];?break;?}??//7字顺转270度

case?16:?{?a[x][y+1]=b[1];?a[x][y-1]=b[2];?a[x+2][y-1]=b[3];?break;?}??//倒7字方块

case?17:?{?a[x-2][y]=b[1];?a[x+2][y+1]=b[2];?a[x+2][y]=b[3];?break;?}??//倒7字顺转90度

case?18:?{?a[x][y-1]=b[1];?a[x][y+1]=b[2];?a[x-2][y+1]=b[3];?break;?}??//倒7字顺转180度

case?19:?{?a[x-2][y]=b[1];?a[x-2][y-1]=b[2];?a[x+2][y]=b[3];?break;?}??//倒7字顺转270度

}

}

void?keyD(?)??//按键操作

{?if?(kbhit(?))

{?int?key;

?? key=getch();

if?(key==224)

{?key=getch();

? ? ?? if?(key==75)?{?x-=2;?}??//按下左方向键,中心横坐标减2

if?(key==77)?{?x+=2;?}??//按下右方向键,中心横坐标加2

? ? ? if?(key==72)?????//按下向上方向键,方块变体

{?if?(flag=2??flag=3?)?{?flag++;?flag%=2;?flag+=2;?}

if?(?flag=4??flag=7?)?{?flag++;?flag%=4;?flag+=4;?}

if?(flag=8??flag=11?)?{?flag++;?flag%=4;?flag+=8;?}

if?(flag=12??flag=15?)?{?flag++;?flag%=4;?flag+=12;?}

if?(?flag=16??flag=19?)?{?flag++;?flag%=4;?flag+=16;?}?}

? ? ?? }

? ? if?(key==32)?????//按空格键,暂停

{?prfk(?);?while(1)?{?if?(getch(?)==32)?{?clfk(?);break;}?}?}? //再按空格键,继续游戏

? ? if?(ifmov(?)==0)?{?x=Tb;?flag=Tc;?}? //如果不可动,撤销上面操作

? ? else?{?prfk(?);?Sleep(speed);?clfk(?);?Tb=x;Tc=flag;} ? //如果可动,执行操作

}

}

int?ifmov(?)???//判断能否移动

{?if?(a[x][y]!=0)?{?return?0;?}??//方块中心处有图案返回0,不可移动

else{?if?(?(flag==1??(?a[x][?y-1]==0??a[x+2][y-1]==0??a[x+2][y]==0?)?)?||

? ? ?? (flag==2??(?a[x-2][y]==0??a[x+2][y]==0??a[x+4][y]==0?)?)?||

? ? ?? (flag==3??(?a[x][y-1]==0??a[x][y-2]==0??a[x][y+1]==0?)?)?||

? ? ?? (flag==4??(?a[x-2][y]==0??a[x+2][y]==0??a[x][y+1]==0?)?)?||

? ? ?? (flag==5??(?a[x][y-1]==0??a[x][y+1]==0??a[x-2][y]==0?)?)?||

? ? ?? (flag==6??(?a[x][?y-1]==0??a[x-2][y]==0??a[x+2][y]==0?)?)?||

? ? ?? (flag==7??(?a[x][y-1]==0??a[x][y+1]==0??a[x+2][y]==0?)?)?||

? ? ?? (flag==8??(?a[x][y+1]==0??a[x-2][y]==0??a[x+2][y+1]==0?)?)?||

? ? ?? (flag==9??(?a[x][y-1]==0??a[x-2][y]==0??a[x-2][y+1]==0?)?)?||

? ? ?? (flag==10??(?a[x][y-1]==0??a[x-2][y-1]==0??a[x+2][y]==0?)?)?||

? ? ?? (flag==11??(?a[x][y+1]==0??a[x+2][y-1]==0??a[x+2][y]==0?)?)?||

? ? ?? (flag==12??(?a[x][y-1]==0??a[x][y+1]==0??a[x-2][y-1]==0?)?)?||

? ? ? ( flag==13 ( a[x-2][y]==0 a[x+2][y-1]==0 a[x+2][y]==0 ) ) ||

????( flag==14 ( a[x][y-1]==0 a[x][y+1]==0 a[x+2][y+1]==0 ) ) ||

? ?? (flag==15 ( a[x-2][y]==0 a[x-2][y+1]==0 a[x+2][y]==0 ) ) ||

? ?? (flag==16 ( a[x][y+1]==0 a[x][y-1]==0 a[x+2][y-1]==0 ) ) ||

? ?? ( flag==17 ( a[x-2][y]==0 a[x+2][y+1]==0 a[x+2][y]==0 ) ) ||

????(flag==18 ( a[x][y-1]==0 a[x][y+1]==0 a[x-2][y+1]==0 ) ) ||

? ?? (flag==19 ( a[x-2][y]==0 a[x-2][y-1]==0

? ? ? ? ? ? ?a[x+2][y]==0?)?)?)?{?return?1;?}

}

return?0; ? //其它情况返回0

}

void?clNEXT(?) ? //清除框外的NEXT方块

{?flag?=?next;??x=ZL+WID+6;??y=ZL+10;??clfk(?);?}

void clHA(?) ? //清除满行的方块

{?int?k,?Hang=0; ?? //k是某行方块个数,?Hang是删除的方块行数

for(j=ZL+HEI-1;j=ZL+1;j--)??//当某行有WID/2-2个方块时,则为满行

{?k=0;?for(i=ZL+2;iZL+WID-2;i+=2)

{?if?(a[i][j]==1)???//竖坐标从下往上,横坐标由左至右依次判断是否满行

{?k++; ? //下面将操作删除行

? ?? if?(k==WID/2-2)? { ? for(k=ZL+2;kZL+WID-2;k+=2)

? ? ? ?? {?a[k][j]=0;?gtxy(k,j);?printf("??");?Sleep(1);?}

? ? ? ? for(k=j-1;kZL;k--)

? ? ? ? {?for(i=ZL+2;iZL+WID-2;i+=2)??//已删行数上面有方块,先清除再全部下移一行

? ? ? ? ? {?if(a[i][k]==1)?{?a[i][k]=0;?gtxy(i,k);?printf("??");a[i][k+1]=1;

? ? ? ? ? ? gtxy(i,k+1);?printf("□");?}?}

? ? ? ? ? }

? ? ? ? j++;?????//方块下移后,重新判断删除行是否满行

? ? ? ? Hang++;??//记录删除方块的行数

? ? ?? }

? ? }

?? }

}

score+=100*Hang; ? //每删除一行,得100分

if?(?Hang0??(score%500==0?||?score/500?level-1?)?) ?//得分满500速度加快升一级

? {?speed-=20;?level++;?if(speed200)speed+=20; }

}

c语言游戏编程,下落的小鸟 求代码

下落的小鸟

#includestdio.h

#includestdlib.h

#includeconio.h

#includetime.h

#includeWindows.h

int Grade = 1, Score = 0, Max_blank = 9, Distance = 18;

struct Birds{int x; int y;}; ?//定义一种Birds数据类型(含3个成员)

Birds *Bird = (Birds*)malloc(sizeof(Birds)); ?//定义Birds类型 指针变量Bird并赋初值

struct Bg{int x, y; int l_blank; Bg *pri; Bg *next;};? //定义一种Bg数据类型(含5个成员)

Bg *Bg1 = (Bg*)malloc(sizeof(Bg));? //定义Bg类型 指针变量Bg1并赋初值

void Position(int x, int y) ?//光标定位函数(用于指定位置输出)

{COORD pos = { x - 1, y - 1 };

HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorPosition(Out, pos);

}

void Csh( ) ?//初始化界面

{

printf("══════════════════════════════════════\n");

printf(" ■■ ■■ C语言版 Flappy Bird \n");

printf(" ■■ ■■\n");

printf(" ■■ ■■\n");

printf(" ■■ ■■ 瞎搞人:yyposs原创\n");

printf(" ■■ ■■ 瞎搞日期:2014.2\n");

printf(" ■■ ■■\n");

printf(" ■■ ■■ 改编:鸣蝉百2021.7\n");

printf(" ■■ ■■ 操作:按向上方向键让小鸟起飞\n");

printf(" ■■\n");

printf(" ■■\n");

printf(" ■■ ■■\n");

printf(" ■■ ■■\n");

printf(" ■■ ■■\n");

printf(" ■■ ■■\n");

printf(" ■■ ■■ DEVc++运行通过\n");

printf("══════════════════════════════════════\n");

printf("? 按键继续…");

getch( );

system("cls");

}

void PrFK( ) ?//输出方框(游戏范围区)

{int i;

Position(1, 1); printf("╔");? Position(79, 1); printf("╗");

Position(1, 24); printf("╚");? Position(79, 24); printf("╝");

for (i = 3; i = 78; i += 2){Position(i, 1); printf("═"); Position(i, 24); printf("═");}

for(i=2;i=23;i++)

{ Position(1,i); printf("║");if(i11)printf("0%d",i-1);else printf("%d",i-1);

Position(79,i); printf("║");

}

Position(4, 25); printf("小鸟即将出现,请准备按键起飞… ");

getch( );

Position(4, 25); printf("????????????????????????????????? ");

}

void CreatBg( )? //创建障碍物坐标(便于打印输出)

{Bg *Bg2 = (Bg*)malloc(sizeof(Bg));

Bg1-x = 90; Bg1-y = 8;? //确定障碍物的一对基本坐标(此时值是在游戏框之外)

Bg2-x = Bg1-x + Distance; Bg2-y = 9;? //下一障碍物的基本坐标x、y

Bg1-l_blank = Max_blank - Grade;? //障碍物上下两部分之间的空白距离l_blank

Bg2-l_blank = Max_blank - Grade;

Bg1-next = Bg2; Bg1-pri = Bg2;

Bg2-next = Bg1; Bg2-pri = Bg1;

}

void InsertBg(Bg *p)? //随机改变障碍物的y坐标,让空白通道有上下变化

{int temp;

Bg *Bgs = (Bg*)malloc(sizeof(Bg));

Bgs-x = p-pri-x + Distance;

Bgs-l_blank = Max_blank - Grade;

srand((int)time(0)); ?//启动随机数发生器

temp = rand( ); ?//产生一个随机数并赋值给temp

if (temp % 2 == 0)

{if ((temp % 4 + p-pri-y + Max_blank - Grade)21)

Bgs-y = p-pri-y + temp % 4;

else Bgs-y = p-pri-y;

}

else

{if ((p-pri-y - temp % 4)2)Bgs-y = p-pri-y - temp % 4;

else Bgs-y = p-pri-y;

}

Bgs-pri = p-pri; Bgs-next = p;

p-pri-next = Bgs; p-pri = Bgs;

}

void CreatBird( )? //建立小鸟的坐标(初始打印输出小鸟的位置)

{Bird-x = 41; Bird-y = 10;}

int CheckYN(Bg *q)? //判断游戏结束与否(值为0是要结束,为1没有要结束)

{Bg *p = q; int i = 0;

while (++i = 5)

{if (Bird-y23)return 0;

if (Bird-x == p-xBird-y = p-y)return 0;

if ((Bird-x == p-x || Bird-x == p-x + 1 || Bird-x == p-x + 2) Bird-y == p-y)return 0;

if (Bird-x == p-xBird-yp-y + p-l_blank)return 0;

if ((Bird-x == p-x || Bird-x == p-x + 1 || Bird-x == p-x + 2) Bird-y == p-y + p-l_blank)

return 0;

p = p-next;

}

return 1;

}

void Check_Bg(Bg *q)? //核查开头的障碍物坐标是否在游戏区内

{Bg *p = q; int i = 0, temp;

while (++i = 5)

{if (p-x-4)p = p-next;

else

{srand((int)time(0)); ?temp = rand();

if (temp % 2 == 0)

{if ((temp % 4 + p-y + Max_blank - Grade)21)p-y = p-y + temp % 4;

else p-y = p-y; p-x = p-pri-x + Distance;

p-l_blank = Max_blank - Grade;

}

else

{if ((p-y - temp % 4)2)p-y = p-y - temp % 4;

else p-y = p-y; p-x = p-pri-x + Distance;

p-l_blank = Max_blank - Grade;

}

}

}

}

void Prt_Bg(Bg *q)? //打印输出障碍物(依据其x、y坐标进行相应输出)

{Bg *p = q; int i = 0, k, j;

while (++i = 5)

{if (p-x0 p-x = 78)

{for (k = 2; kp-y; k++){Position(p-x + 1, k); printf("■"); printf("■"); printf(" ");}

Position(p-x, p-y);

printf("■"); printf("■"); printf("■"); printf(" ");

Position(p-x, p-y + p-l_blank);

printf("■"); printf("■"); printf("■"); printf(" ");

k = k + p-l_blank + 1;

for (k; k = 23; k++){Position(p-x + 1, k); printf("■"); printf("■"); printf(" ");}

}

p = p-next;

if (p-x == 0)

{for (j = 2; jp-y; j++){Position(p-x + 1, j); printf(" "); printf(" ");}

Position(p-x + 1, p-y);

printf(" "); printf(" "); printf(" ");

Position(p-x + 1, p-y + Max_blank - Grade);

printf(" "); printf(" "); printf(" ");

j = j + Max_blank - Grade + 1;

for (j; j = 22; j++){Position(p-x + 1, j); printf(" "); printf(" ");}

}

}

}

void PrtBird( )? //打印输出小鸟

{Position(Bird-x, Bird-y - 1); printf(" ");

Position(Bird-x, Bird-y); printf("Ю");

Position(38, 2); printf("Score:%d", Score);

}

void Loop_Bg(Bg *q)? //障碍物x坐标左移,并记录成绩

{Bg *p = q; int i = 0;

while (++i = 5)

{p-x = p-x - 1; p = p-next;

if (Bird-x == p-x)

{Score += 1;

if (Score % 4 == 0 Grade4)Grade++;

}

}

}

int main( )

{int i = 0; int t;

while (1)

{

Csh( );PrFK( );CreatBg( );

InsertBg(Bg1);InsertBg(Bg1);InsertBg(Bg1);

CreatBird( );

while (1)

{if (!CheckYN(Bg1))break;

Check_Bg(Bg1);Prt_Bg(Bg1);

PrtBird( );Loop_Bg(Bg1);

Bird-y = Bird-y + 1;

if (GetAsyncKeyState(VK_UP)) ?//按下了向上方向键

{Position(Bird-x, Bird-y - 1);printf(" ");

Bird-y = Bird-y - 4;

}

Sleep(200);? //程序延时200毫秒(数值大小决定游戏速度快慢)

i = 0;

}

Position(6, 25);

printf("游戏结束!? 请输入:0.退出? 1.重玩");

scanf("%d",t);

if (t==0)break;

system("cls"); Score = 0;

}

return 0;

}

怎样用C语言编写一个小游戏?

“贪吃蛇”C代码:

#include stdio.h

#include stdlib.h

#include conio.h

#include time.h

#include Windows.h

#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;

coord.X=x;

coord.Y=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(snk.speed);

? ? ? 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;iH;i++)

{ gtxy(0,i); printf("■"); ?//打印左边框

?? gtxy(W,i); printf("■"); ?//打印右边框

}

while(1)

??{ srand((unsigned)time(NULL));? //初始化随机数发生器srand( )

? fod.x=rand()%(W-4)+2;? //随机函数rand( )产生一个从0到比”(W-4)”小1的数再加2

? fod.y=rand()%(H-2)+1;? //随机函数rand( )产生一个从0到比”(H-2)”小1的数再加1

? if (fod.x%2==0) break;? //fod.x是食物的横坐标,要是2的倍数(为偶数)

}

setColor(12, 0);? //设定打印颜色为淡红字黑底

gtxy(fod.x,fod.y); printf("●"); ?//到食物坐标处打印初试食物

snk.len=3; ?????//蛇身长

snk.speed=350;? //刷新蛇的时间,即是移动速度

snk.x[0]=W/2+1;? //蛇头横坐标要为偶数(因为W/2=39)

snk.y[0]=H/2;?? ?//蛇头纵坐标

setColor(9, 0);? //设定打印颜色为淡蓝字黑底

gtxy(snk.x[0], snk.y[0]); ?printf("■"); ?//打印蛇头

for(i=1;isnk.len;i++)

? ? { snk.x[i]=snk.x[i-1]+2; ?snk.y[i]=snk.y[i-1];

? ? ? gtxy(snk.x[i],snk.y[i]); ?printf("■"); ?//打印蛇身

?? }

setColor(7, 0);? //恢复默认的白字黑底

return;

}

void keymove( )? //按键操作移动蛇

{ int key;

if( kbhit( ) )??? //如有按键输入才执行下面操作

?? { key=getch( );

? ?? if (key==224)? //值为224表示按下了方向键,下面要再次获取键值

? ? ?? { key=getch( );

? ? ? ?? if(key==72dir!=2)dir=1;? //72表示按下了向上方向键

? ? ? ?? if(key==80dir!=1)dir=2;? //80为向下

? ? ? ?? if(key==75dir!=4)dir=3;? //75为向左

? ? ? ?? if(key==77dir!=3)dir=4;? //77为向右

? ? ?? }

?? if (key==32)

? ? ? { while(1) if((key=getch( ))==32) break; }? //32为空格键,这儿用来暂停

? }

if (Flag==0)? //如没吃食物,才执行下面操作擦掉蛇尾

? { gtxy(snk.x[snk.len-1],snk.y[snk.len-1]); ?printf("? "); }

int i;

for (i = snk.len - 1; i 0; i--) ?//从蛇尾起每节存储前一节坐标值(蛇头除外)

{ snk.x[i]=snk.x[i-1]; ?snk.y[i]=snk.y[i-1]; }

switch (dir)? //判断蛇头该往哪个方向移动,并获取最新坐标值

{ case 1: snk.y[0]--; break; ??//dir=1要向上移动

? case 2: snk.y[0]++; break;? //dir=2要向下移动

? case 3: snk.x[0]-=2; break;? //dir=3要向左移动

? case 4: snk.x[0]+=2; break;? //dir=4要向右移动

}

setColor(9, 0);

gtxy(snk.x[0], snk.y[0]); printf("■"); ?//打印蛇头

if (snk.x[0] == fod.x snk.y[0] == fod.y)? //如吃到食物则执行以下操作

?? { printf("\007"); snk.len++; score += 100; snk.speed -= 5; Flag = 1; } //007是响铃

else Flag = 0; ? //没吃到食物Flag的值为0

if(snk.speed150) snk.speed= snk.speed+5;? //作弊码,不让速度无限加快

}

void putFod( )? //投放食物

{ if (Flag == 1)? //如吃到食物才执行以下操作,生成另一个食物

?? { while (1)

??{ int i,n= 1;

???srand((unsigned)time(NULL));? //初始化随机数发生器srand( )

? ?fod.x = rand( ) % (W - 4) + 2;? //产生在游戏框范围内的一个x坐标值

? ?fod.y = rand( ) % (H - 2) + 1;? //产生在游戏框范围内的一个y坐标值

? ?for (i = 0; i snk.len; i++) ??//随机生成的食物不能在蛇的身体上

?{ if (fod.x == snk.x[i] fod.y == snk.y[i]) { n= 0; break;} }

???if (n fod.x % 2 == 0) break; ?//n不为0且横坐标为偶数,则食物坐标取值成功

??}

?setColor(12, 0);

? ? ? gtxy(fod.x, fod.y); ?printf("●"); ? //光标到取得的坐标处打印食物

?? }

return;

}

int Over( )? //判断游戏是否结束的函数

{ int ?i;

setColor(7, 0);

gtxy(2,H+1); printf(“暂停键:space.”); ?//以下打印一些其它信息

gtxy(2,H+2); printf(“游戏得分:%d”,score);

if (snk.x[0] == 0 || snk.x[0] == W) return 1;? //蛇头触碰左右边界

if (snk.y[0] == 0 || snk.y[0] == H) return 1;? //蛇头触碰上下边界

for (i = 1; i snk.len; i++)

{ if (snk.x[0] == snk.x[i] snk.y[0] == snk.y[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 );

} ? //用来设定颜色的函数

关于用C语言编写的小游戏的游戏代码,如黑白棋贪吃蛇等

我这儿有c语言的自写俄罗斯方块,请指教:#include

#include

#include

#include

#include

#include

#include

#define ESC 0x011b

#define UP 0x4800

#define DOWN 0x5000

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define SPACE 0x3920

#define Y 0x1579

#define N 0x316e

#define clearkbd(); while(bioskey(1)) bioskey(0); /*清空键盘缓冲队列*/

void update();

void messagebox();

void process();

void initremove();

void initinfo();

void initbox();

void initposition();

void next_shape();

typedef struct shape /*形状单一状态的记录*/

{ int attr;

int co[8];

}shape;

typedef struct RE_AB /*相对,绝对坐标记录*/

{ int Rx,Ry;

int x1,x2,y1,y2;

}RE_AB;

RE_AB RA;

shape p[19]={ { RED,0,1,1,0,1,1,2,1 }, /*数组中保证y最大的在最后,以便initposition使用*/

{ RED,0,1,1,0,1,1,1,2 },

{ RED,0,0,1,0,2,0,1,1 },

{ RED,0,0,0,1,1,1,0,2 },

{ GREEN,0,0,1,0,2,0,3,0 },

{ GREEN,0,0,0,1,0,2,0,3 },

{ CYAN,0,0,0,1,1,0,1,1 },

{ BROWN,0,0,1,0,1,1,2,1 },

{ BROWN,1,0,0,1,1,1,0,2 },

{ BLUE,1,0,2,0,1,1,0,1 },

{ BLUE,0,0,0,1,1,1,1,2 },

{ MAGENTA,0,0,0,1,0,2,1,2 },

{ MAGENTA,2,0,0,1,1,1,2,1},

{ MAGENTA,0,0,1,0,1,1,1,2 },

{ MAGENTA,0,0,0,1,1,0,2,0 },

{ YELLOW,0,2,1,0,1,1,1,2 },

{ YELLOW,0,0,1,0,2,0,2,1 },

{ YELLOW,1,0,0,0,0,1,0,2},

{ YELLOW,0,0,0,1,1,1,2,1 },

};

int nback,nleft,nright,r_f[12][22],rs1,rs2,xcors,xcorb,ycors,ycorb;

/*检查方快有没有左,右,下接触,游戏区内所有格子有无颜色记录数组,rs1形状记录,rs2为提示框用,记录小格子在游戏区中的位置,按键存储*/

void interrupt (*oldint)(); /*系统定时中断*/

int count_down=0,count_other=0; /*中断记时*/

void interrupt newint() /*设置新的中断程序*/

{ count_down++;

count_other++;

oldint();

}

void intenable() /*设置中断向量表,启动新的中断程序*/

{ oldint=getvect(0x1c);

disable();

setvect(0x1c,newint);

enable();

}

void intrestore() /*恢复中断向量*/

{ disable();

setvect(0x1c,oldint);

enable();

}

void HZ12(int x0,int y0,int w,int color,char *s) /*根据字模,在dos下显示汉字*/

/*横坐标,纵坐标,字间隔,汉字颜色,汉字字符串*/

{ FILE *fp;

register char buffer[24];

register char str[2];

unsigned long fpos;/*fpos为最终偏移动量*/

register int i,j,k;

fp=fopen(hzk12,r);/*打开12*12汉字苦*/

while(*s)/*一直到字符串结束为止*/

{

if(*s0)/*汉字输出*/

{ str[0]=(*s)-0xa0;

str[1]=*(s+1)-0xa0;

fpos=((str[0]-1)*94+(str[1]-1))*24L;/*计算汉字在hzk12的偏移量*/

fseek(fp,fpos,SEEK_SET);/*指针移动到当前位置*/

fread(buffer,24,1,fp);/*读取一个汉字到数组中*/

for(i=0;i12;i++)/*12行*/

for(j=0;j2;j++)/*两个字节*/

for(k=0;k8;k++)/*8位*/

if (((buffer[i*2+j](7-k))0x1)!=NULL)/*是一就画点*/

putpixel(x0+8*j+k,y0+i,color);

s+=2;/*一个汉字占两个字节,现在将指针移动两个字节*/

x0+=w;/*显示坐标也按照间隔移动*/

}

else/*显示非汉字字符*/

{ settextstyle(0,0,1);

setcolor(color);

str[0]=*s;str[1]=0;

outtextxy(x0,y0+3,str);/*显示单个字符*/

x0+=w-7;/*显示单个字符后的x坐标变化*/

s++;/*指针移动到下一个字节*/

}

}

fclose(fp);

}

void translation() /*把相对坐标解释为绝对坐标*/

{ if(RA.Rx==1)

{ RA.x1=1; RA.x2=16; }

else

{ RA.x1=16*(RA.Rx-1); RA.x2=16*RA.Rx; }

if(RA.Ry==1)

{ RA.y1=1; RA.y2=16; }

else

{ RA.y1=16*(RA.Ry-1); RA.y2=16*RA.Ry; }

}

int check_b() /*检查是否到达低部*/

{ int x,y,i,zf=0; /*zf为是否有颜色填充记录*/

for(i=0;i7;i++,i++)

{ x=RA.Rx+p[rs1].co[i];

y=RA.Ry+p[rs1].co[i+1];

if(y=6)

zf+=r_f[x-15][y-6+1];

}

if(zf==0)

return 1;

else

return 0;

}

int finish()

{ int tfull=0,i; /*判断顶层空间是否有填充*/

for(i=1;i11;i++)

tfull+=r_f[i][1];

if(tfull!=0)

return 1; /*告诉judge()可以结束了*/

}

int check_l() /*检查形状是否与左接触*/

{ int x,y,i,zf=0;

for(i=0;i7;i++,i++)

{ x=RA.Rx+p[rs1].co[i];

y=RA.Ry+p[rs1].co[i+1];

if(y6)

zf+=r_f[x-15-1][y-6];

if(y=6x==16)

zf+=1;

}

if(zf==0)

return 1;

else

return 0;

}

int check_r() /*检查形状是否与右接触*/

{ /*zf为是否有颜色填充记录*/

int x,y,i,zf=0; /*zf为是否有颜色填充记录*/

for(i=0;i7;i++,i++)

{

x=RA.Rx+p[rs1].co[i];

y=RA.Ry+p[rs1].co[i+1];

if(y6)

zf+=r_f[x-15+1][y-6];

if(y=6x==25)

zf+=1;

}

if(zf==0)

return 1;

else

return 0;

}

void check_touch()

{ nback=check_b();

nleft=check_l();

nright=check_r();

}

void draw(int cb) /*画形状,cb=1以填充色画形状,cb=2以背景色画形状,cb=3以白色画形状*/

{ int i,recordx=RA.Rx,recordy=RA.Ry;

for(i=0;i7;i++,i++)

{ RA.Rx+=p[rs1].co[i];

RA.Ry+=p[rs1].co[i+1];

if(RA.Ry=6)

{ RA.Rx=recordx;

RA.Ry=recordy;

continue;

}

translation();

if(cb==1)

setfillstyle(1,p[rs1].attr);

else

if(cb==2)

setfillstyle(1,BLACK);

else

if(cb==3)

{ setfillstyle(1,WHITE);

r_f[RA.Rx-15][RA.Ry-6]=1; /*置对应数组标记元素*/

}

bar(RA.x1+1,RA.y1+1,RA.x2-1,RA.y2-1);

RA.Rx=recordx;

RA.Ry=recordy;

}

}

void mov(int key) /*向下,左,右移动方块*/

{ draw(2);

if(key==LEFTnleft)

RA.Rx--;

else

if(key==RIGHTnright)

RA.Rx++;

else

RA.Ry++;

nback=check_b();

if(nback) /*判断形状有没有到达底部,有就将其颜色变为白色*/

draw(1);

else

draw(3);

}

void change() /*变换形状*/

{ int status=rs1,buffer,i,x,y,zf=0;

if(p[rs1].attr==p[rs1+1].attr)

rs1++;

else

while(p[rs1].attr==p[rs1-1].attr)

rs1--;

for(i=0;i7;i++,i++) /*检查变化形状后是否与已存形状发生冲突*/

{ x=RA.Rx+p[rs1].co[i];

y=RA.Ry+p[rs1].co[i+1];

if(y6)

zf+=r_f[x-15][y-6];

}

if(zf!=0)

rs1=status;

buffer=rs1;

rs1=status;

status=buffer;

draw(2);

buffer=rs1;

rs1=status;

status=buffer;

nback=check_b(); /*判断变化后的形状是不是到达了低部,这个检查是十分必要的*/

if(nback)

draw(1);

else

draw(3);

}

void accelerate()

{ if(count_down=1)

{ check_touch(); /*消除上一步动作对方块状态的影响*/

count_down=0;

if(nback) /*0表示到达底部,1表示没有到达*/

mov(DOWN);

}

}

void drawbox() /*画方块所在方框*/

{ int xcor,ycor;

for(xcor=xcors;xcor=xcorb;xcor++)

for(ycor=ycors;ycor=ycorb;ycor++)

{ if(xcor==xcors||xcor==xcorb||ycor==ycors||ycor==ycorb)

{ RA.Rx=xcor;

RA.Ry=ycor;

translation();

setfillstyle(1,DARKGRAY);

bar(RA.x1+1,RA.y1+1,RA.x2-1,RA.y2-1);

}

}

}

void erasure(int k)

{ int i,j,recordx=RA.Rx,recordy=RA.Ry;

{ j=k-1;

for(;j0;j--)

{ for(i=1;i11;i++)

{ r_f[i][j+1]=r_f[i][j];

RA.Rx=i+15;

RA.Ry=j+1+6;

translation();

if(r_f[i][j+1]==1)

setfillstyle(1,WHITE);

else

setfillstyle(1,BLACK);

bar(RA.x1+1,RA.y1+1,RA.x2-1,RA.y2-1);

RA.Rx=recordx;

RA.Ry=recordy;

}

}

}

}

void pause()

{ HZ12(450,400,15,BLACK,正常);

HZ12(450,400,15,GREEN,暂停);

for(;;)

if(bioskey(1)bioskey(0)==SPACE)

{ clearkbd();

HZ12(450,400,15,BLACK,暂停);

HZ12(450,400,15,RED,正常);

return;

}

}

void judge()

{ int i,j,full=0; /*full等于10说明某一行满,该消除了*/

if(finish()) /*判断游戏是否该结束了*/

messagebox(); /*win编程里有这个函数*/

for(j=1;j21;j++) /*判断某一行是否满了*/

{ for(i=1;i11;i++)

full+=r_f[i][j];

if(full==10)

erasure(j); /*消除这行*/

full=0;

}

}

void update() /*使程序可以重新运行*/

{ cleardevice();

setbkcolor(BLACK);

initinfo(); /*提示信息初始化*/

initbox(); /*游戏框架初始化*/

srand((unsigned)time(NULL)); /*随机器函数的初始化*/

rs1=random(19);

rs2=random(19);

next_shape();

initposition(); /*方块最开始的出现位置*/

initremove(); /*记录每个方格有无颜色填充数组初始化*/

HZ12(450,400,15,RED,正常);

process();

}

void EXIT()

{ closegraph();

intrestore(); /*恢复中断向量*/

exit(0);

}

void initremove()

{ int i,j;

for(i=0;i12;i++)

for(j=0;j22;j++)

if(i==0||i==11||j==0||j==21)

r_f[i][j]=1;

else

r_f[i][j]=0;

}

void initinfo()

{ char aStr[2];

setcolor(RED);

outtextxy(450,100,This game's writer is:);

HZ12(450,140,15,RED,该程序作者:NULL);

outtextxy(525,110,NULL);

outtextxy(450,180,FUNCTION FOR KEYS:);

outtextxy(450,200,UP:change the shape);

outtextxy(450,210,DOWN:accelerate);

outtextxy(450,220,LEFT:move left);

outtextxy(450,230,RIGHT:move right);

outtextxy(450,240,ESC:exit this game);

outtextxy(450,250,SPACE:pause);

HZ12(450,260,20,RED,上:);

HZ12(450,280,20,RED,下:);

HZ12(450,300,20,RED,左:);

HZ12(450,320,20,RED,右:);

HZ12(450,340,20,RED,ESC:退出);

HZ12(450,360,15,RED,空格: 暂停/开始);

HZ12(450,380,15,RED,目前状态:);

HZ12(20,200,15,RED,下一个形状);

aStr[0]=24;

aStr[1]=0;

aStr[6]=0;

HZ12(480,260,12,GREEN,aStr);

HZ12(500,260,12,GREEN,( 变形 ));

aStr[0]=25;

aStr[1]=0;

HZ12(480,280,12,GREEN,aStr);

HZ12(500,280,12,GREEN,( 加速 ));

aStr[0]=27;

aStr[1]=0;

HZ12(480,300,12,GREEN,aStr);

HZ12(500,300,12,GREEN,向左);

aStr[0]=26;

aStr[1]=0;

HZ12(480,320,12,GREEN,aStr);

HZ12(500,320,12,GREEN,向右);

}

void messagebox()

{ int key;

setcolor(GREEN);

setfillstyle(1,DARKGRAY);

rectangle(220,200,420,300);

bar(221,201,419,299);

HZ12(280,210,15,GREEN,GAME OVER);

HZ12(275,230,15,GREEN,重新游戏: Y);

HZ12(275,270,15,GREEN,退出游戏: N);

HZ12(450,400,15,BLACK,正常);

HZ12(450,400,15,GREEN,GAME OVER);

for(;;)

if(bioskey(1))

{ key=bioskey(0);

if(key==Y)

{ clearkbd();

update();

}

else

if(key==N)

{ clearkbd();

EXIT();

}

else

clearkbd();

}

}

void initbox()

{ xcors=15; /*画游戏框*/

xcorb=26;

ycors=6;

ycorb=27;

drawbox();

xcors=2; /*画提示框*/

xcorb=7;

ycors=6;

ycorb=11;

drawbox();

}

void initposition()

{ RA.Rx=18;

RA.Ry=6-p[rs1].co[7];;

RA.x1=0;

RA.x2=0;

RA.y1=0;

RA.y2=0;

}

void next_shape() /*画下一形状提示框*/

{ int recordx=RA.Rx,recordy=RA.Ry,buffer;

RA.Rx=3;

RA.Ry=7;

draw(2);

buffer=rs1;

rs1=rs2;

rs2=buffer;

draw(1);

RA.Rx=recordx;

RA.Ry=recordy;

buffer=rs1;

rs1=rs2;

rs2=buffer;

}

void process() /*游戏过程*/

{ for(;;)

{ check_touch();

if(!nback)

{ rs1=rs2;

rs2=random(19); /*产生另一种方块的码数*/

initposition();

judge(); /*判断某一行是否满了和这个游戏是否可以结束了*/

draw(1);

next_shape();

}

if(count_other=1)

{ count_other=0;

if(bioskey(1)) /*对按键的处理*/

{ int key=bioskey(0);

clearkbd(); /*清除键盘缓冲队列*/

if(key==ESC)

EXIT();

if(key==LEFTnleftnback)

mov(LEFT);

if(key==RIGHTnrightnback)

mov(RIGHT);

if(key==UPnback)

change();

if(key==SPACE)

pause();

if(key==DOWN)

accelerate();

}

}

if(count_down=4)

{ check_touch(); /*消除上一步动作对方块状态的影响*/

count_down=0;

if(nback) /*0表示到达底部,1表示没有到达*/

mov(DOWN);

}

}/*for*/

}

main()

{ int gdriver=DETECT,gmode=0;

initgraph(gdriver,gmode,d:turboc); /*启动图形与中断部分*/

intenable();

update();

}

用C语言编写的小游戏代码是什么?

“猜数字小游戏”,每个数字后按空格,最后按回车确认

#includestdio.h

#includestdlib.h

#includetime.h

int a[4],b[4];

int count=0;? //计算猜测次数

void csh( );? //初始化

void start( );? //开始游戏

int main( )

{ csh( );

start( );

}

void csh( )? //初始化

{ printf("\n\n???????? 猜? 数? 字? 小? 游? 戏\n\n");

printf(“? ??猜四个数字,如数字与顺序都正确记为A,数字正确位置不对记为B.\n”);

}

void start( )? //开始游戏

{int m,n;? //m是完全猜对的个数,n是顺序不对的个数

while(1)

{srand((unsigned)time(NULL));? //初始化随机数发生器srand( )

while(1) { for(int i=0;i4;i++) a[i]=rand( )%10; ?//rand( )函数每次随机产生一个0-9的数

if( (a[3]!=a[2]a[3]!=a[1]a[3]!=a[0])

(a[2]!=a[1]a[2]!=a[0])a[1]!=a[0] ) break; }? //4个随机数各自不相等

printf("?? ?请依次输入4个一位整数:\n\n? ?");

while(1)

{for(int i=0;i4;i++) scanf(“%d”,b[i]);

printf("?? ?你输入的是:%d? %d? %d? %d ",b[0],b[1],b[2],b[3]);

m=0;n=0;

for(int i=0;i4;i++)

{for(int j=0;j4;j++)

{ if(b[i]==a[j]i==j)m=m+1; if(b[i]==a[j]i!=j)n=n+1; }

}

count=count+1;

printf("????? %dA? %dB?? 你试了%d次\n? ?",m,n,count);

if(m==4)break;

if(count==8){ count=0; break; }

}

printf("\n");

if(m==4)printf("???? 你猜对了(^-^)! 就是:%d %d %d %d\n",a[0],a[1],a[2],a[3]);

else printf("???? 你输了(T-T)!哈哈!应该是:%d %d %d %d\n",a[0],a[1],a[2],a[3]);

int z;

printf("???? (要继续吗?1或0)\n? ?");

scanf(“%d”,z);

if(z==0) break;

}

}

(责任编辑:IT教学网)

更多

推荐Flash actionscript文章