c语言游戏代码(C语言游戏代码复制)

hacker3年前黑客资讯116
本文导读目录:

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语言 游戏 代码

扫雷 #include graphics.h

#include stdlib.h

#include dos.h

#define LEFTPRESS 0xff01

#define LEFTCLICK 0xff10

#define LEFTDRAG 0xff19

#define MOUSEMOVE 0xff08

struct

{

int num;/*格子当前处于什么状态,1有雷,0已经显示过数字或者空白格子*/

int roundnum;/*统计格子周围有多少雷*/

int flag;/*右键按下显示红旗的标志,0没有红旗标志,1有红旗标志*/

}Mine[10][10];

int gameAGAIN=0;/*是否重来的变量*/

int gamePLAY=0;/*是否是之一次玩游戏的标志*/

int mineNUM;/*统计处理过的格子数*/

char randmineNUM[3];/*显示数字的字符串*/

int Keystate;

int MouseExist;

int MouseButton;

int MouseX;

int MouseY;

void Init(void);/*图形驱动*/

void MouseOn(void);/*鼠标光标显示*/

void MouseOff(void);/*鼠标光标隐藏*/

void MouseSetXY(int,int);/*设置当前位置*/

int LeftPress(void);/*左键按下*/

int RightPress(void);/*鼠标右键按下*/

void MouseGetXY(void);/*得到当前位置*/

void Control(void);/*游戏开始,重新,关闭*/

void GameBegain(void);/*游戏开始画面*/

void DrawSmile(void);/*画笑脸*/

void DrawRedflag(int,int);/*显示红旗*/

void DrawEmpty(int,int,int,int);/*两种空格子的显示*/

void GameOver(void);/*游戏结束*/

void GameWin(void);/*显示胜利*/

int MineStatistics(int,int);/*统计每个格子周围的雷数*/

int ShowWhite(int,int);/*显示无雷区的空白部分*/

void GamePlay(void);/*游戏过程*/

void Close(void);/*图形关闭*/

void main(void)

{

Init();

Control();

Close();

}

void Init(void)/*图形开始*/

{

int gd=DETECT,gm;

initgraph(gd,gm,"c:\\tc");

}

void Close(void)/*图形关闭*/

{

closegraph();

}

void MouseOn(void)/*鼠标光标显示*/

{

_AX=0x01;

geninterrupt(0x33);

}

void MouseOff(void)/*鼠标光标隐藏*/

{

_AX=0x02;

geninterrupt(0x33);

}

void MouseSetXY(int x,int y)/*设置当前位置*/

{

_CX=x;

_DX=y;

_AX=0x04;

geninterrupt(0x33);

}

int LeftPress(void)/*鼠标左键按下*/

{

_AX=0x03;

geninterrupt(0x33);

return(_BX1);

}

int RightPress(void)/*鼠标右键按下*/

{

_AX=0x03;

geninterrupt(0x33);

return(_BX2);

}

void MouseGetXY(void)/*得到当前位置*/

{

_AX=0x03;

geninterrupt(0x33);

MouseX=_CX;

MouseY=_DX;

}

void Control(void)/*游戏开始,重新,关闭*/

{

int gameFLAG=1;/*游戏失败后判断是否重新开始的标志*/

while(1)

{

if(gameFLAG)/*游戏失败后没判断出重新开始或者退出游戏的话就继续判断*/

{

GameBegain(); /*游戏初始画面*/

GamePlay();/*具体游戏*/

if(gameAGAIN==1)/*游戏中重新开始*/

{

gameAGAIN=0;

continue;

}

}

MouseOn();

gameFLAG=0;

if(LeftPress())/*判断是否重新开始*/

{

MouseGetXY();

if(MouseX280MouseX300MouseY65MouseY85)

{

gameFLAG=1;

continue;

}

}

if(kbhit())/*判断是否按键退出*/

break;

}

MouseOff();

}

void DrawSmile(void)/*画笑脸*/

{

setfillstyle(SOLID_FILL,YELLOW);

fillellipse(290,75,10,10);

setcolor(YELLOW);

setfillstyle(SOLID_FILL,BLACK);/*眼睛*/

fillellipse(285,75,2,2);

fillellipse(295,75,2,2);

setcolor(BLACK);/*嘴巴*/

bar(287,80,293,81);

}

void DrawRedflag(int i,int j)/*显示红旗*/

{

setcolor(7);

setfillstyle(SOLID_FILL,RED);

bar(198+j*20,95+i*20,198+j*20+5,95+i*20+5);

setcolor(BLACK);

line(198+j*20,95+i*20,198+j*20,95+i*20+10);

}

void DrawEmpty(int i,int j,int mode,int color)/*两种空格子的显示*/

{

setcolor(color);

setfillstyle(SOLID_FILL,color);

if(mode==0)/*没有单击过的大格子*/

bar(200+j*20-8,100+i*20-8,200+j*20+8,100+i*20+8);

else

if(mode==1)/*单击过后显示空白的小格子*/

bar(200+j*20-7,100+i*20-7,200+j*20+7,100+i*20+7);

}

void GameBegain(void)/*游戏开始画面*/

{

int i,j;

cleardevice();

if(gamePLAY!=1)

{

MouseSetXY(290,70); /*鼠标一开始的位置,并作为它的初始坐标*/

MouseX=290;

MouseY=70;

}

gamePLAY=1;/*下次按重新开始的话鼠标不重新初始化*/

mineNUM=0;

setfillstyle(SOLID_FILL,7);

bar(190,60,390,290);

for(i=0;i10;i++)/*画格子*/

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

DrawEmpty(i,j,0,8);

setcolor(7);

DrawSmile();/*画脸*/

randomize();

for(i=0;i10;i++)/*100个格子随机赋值有没有地雷*/

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

{

Mine[i][j].num=random(8);/*如果随机数的结果是1表示这个格子有地雷*/

if(Mine[i][j].num==1)

mineNUM++;/*现有雷数加1*/

else

Mine[i][j].num=2;

Mine[i][j].flag=0;/*表示没红旗标志*/

}

sprintf(randmineNUM,"%d",mineNUM); /*显示这次总共有多少雷数*/

setcolor(1);

settextstyle(0,0,2);

outtextxy(210,70,randmineNUM);

mineNUM=100-mineNUM;/*变量取空白格数量*/

MouseOn();

}

void GameOver(void)/*游戏结束画面*/

{

int i,j;

setcolor(0);

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

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

if(Mine[i][j].num==1)/*显示所有的地雷*/

{

DrawEmpty(i,j,0,RED);

setfillstyle(SOLID_FILL,BLACK);

fillellipse(200+j*20,100+i*20,7,7);

}

}

void GameWin(void)/*显示胜利*/

{

setcolor(11);

settextstyle(0,0,2);

outtextxy(230,30,"YOU WIN!");

}

int MineStatistics(int i,int j)/*统计每个格子周围的雷数*/

{

int nNUM=0;

if(i==0j==0)/*左上角格子的统计*/

{

if(Mine[0][1].num==1)

nNUM++;

if(Mine[1][0].num==1)

nNUM++;

if(Mine[1][1].num==1)

nNUM++;

}

else

if(i==0j==9)/*右上角格子的统计*/

{

if(Mine[0][8].num==1)

nNUM++;

if(Mine[1][9].num==1)

nNUM++;

if(Mine[1][8].num==1)

nNUM++;

}

else

if(i==9j==0)/*左下角格子的统计*/

{

if(Mine[8][0].num==1)

nNUM++;

if(Mine[9][1].num==1)

nNUM++;

if(Mine[8][1].num==1)

nNUM++;

}

else

if(i==9j==9)/*右下角格子的统计*/

{

if(Mine[9][8].num==1)

nNUM++;

if(Mine[8][9].num==1)

nNUM++;

if(Mine[8][8].num==1)

nNUM++;

}

else if(j==0)/*左边之一列格子的统计*/

{

if(Mine[i][j+1].num==1)

nNUM++;

if(Mine[i+1][j].num==1)

nNUM++;

if(Mine[i-1][j].num==1)

nNUM++;

if(Mine[i-1][j+1].num==1)

nNUM++;

if(Mine[i+1][j+1].num==1)

nNUM++;

}

else if(j==9)/*右边之一列格子的统计*/

{

if(Mine[i][j-1].num==1)

nNUM++;

if(Mine[i+1][j].num==1)

nNUM++;

if(Mine[i-1][j].num==1)

nNUM++;

if(Mine[i-1][j-1].num==1)

nNUM++;

if(Mine[i+1][j-1].num==1)

nNUM++;

}

else if(i==0)/*之一行格子的统计*/

{

if(Mine[i+1][j].num==1)

nNUM++;

if(Mine[i][j-1].num==1)

nNUM++;

if(Mine[i][j+1].num==1)

nNUM++;

if(Mine[i+1][j-1].num==1)

nNUM++;

if(Mine[i+1][j+1].num==1)

nNUM++;

}

else if(i==9)/*最后一行格子的统计*/

{

if(Mine[i-1][j].num==1)

nNUM++;

if(Mine[i][j-1].num==1)

nNUM++;

if(Mine[i][j+1].num==1)

nNUM++;

if(Mine[i-1][j-1].num==1)

nNUM++;

if(Mine[i-1][j+1].num==1)

nNUM++;

}

else/*普通格子的统计*/

{

if(Mine[i-1][j].num==1)

nNUM++;

if(Mine[i-1][j+1].num==1)

nNUM++;

if(Mine[i][j+1].num==1)

nNUM++;

if(Mine[i+1][j+1].num==1)

nNUM++;

if(Mine[i+1][j].num==1)

nNUM++;

if(Mine[i+1][j-1].num==1)

nNUM++;

if(Mine[i][j-1].num==1)

nNUM++;

if(Mine[i-1][j-1].num==1)

nNUM++;

}

return(nNUM);/*把格子周围一共有多少雷数的统计结果返回*/

}

int ShowWhite(int i,int j)/*显示无雷区的空白部分*/

{

if(Mine[i][j].flag==1||Mine[i][j].num==0)/*如果有红旗或该格处理过就不对该格进行任何判断*/

return;

mineNUM--;/*显示过数字或者空格的格子就表示多处理了一个格子,当所有格子都处理过了表示胜利*/

if(Mine[i][j].roundnum==0Mine[i][j].num!=1)/*显示空格*/

{

DrawEmpty(i,j,1,7);

Mine[i][j].num=0;

}

else

if(Mine[i][j].roundnum!=0)/*输出雷数*/

{

DrawEmpty(i,j,0,8);

sprintf(randmineNUM,"%d",Mine[i][j].roundnum);

setcolor(RED);

outtextxy(195+j*20,95+i*20,randmineNUM);

Mine[i][j].num=0;/*已经输出雷数的格子用0表示已经用过这个格子*/

return ;

}

/*8个方向递归显示所有的空白格子*/

if(i!=0Mine[i-1][j].num!=1)

ShowWhite(i-1,j);

if(i!=0j!=9Mine[i-1][j+1].num!=1)

ShowWhite(i-1,j+1);

if(j!=9Mine[i][j+1].num!=1)

ShowWhite(i,j+1);

if(j!=9i!=9Mine[i+1][j+1].num!=1)

ShowWhite(i+1,j+1);

if(i!=9Mine[i+1][j].num!=1)

ShowWhite(i+1,j);

if(i!=9j!=0Mine[i+1][j-1].num!=1)

ShowWhite(i+1,j-1);

if(j!=0Mine[i][j-1].num!=1)

ShowWhite(i,j-1);

if(i!=0j!=0Mine[i-1][j-1].num!=1)

ShowWhite(i-1,j-1);

}

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

{

int i,j,Num;/*Num用来接收统计函数返回一个格子周围有多少地雷*/

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

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

Mine[i][j].roundnum=MineStatistics(i,j);/*统计每个格子周围有多少地雷*/

while(!kbhit())

{

if(LeftPress())/*鼠标左键盘按下*/

{

MouseGetXY();

if(MouseX280MouseX300MouseY65MouseY85)/*重新来*/

{

MouseOff();

gameAGAIN=1;

break;

}

if(MouseX190MouseX390MouseY90MouseY290)/*当前鼠标位置在格子范围内*/

{

j=(MouseX-190)/20;/*x坐标*/

i=(MouseY-90)/20;/*y坐标*/

if(Mine[i][j].flag==1)/*如果格子有红旗则左键无效*/

continue;

if(Mine[i][j].num!=0)/*如果格子没有处理过*/

{

if(Mine[i][j].num==1)/*鼠标按下的格子是地雷*/

{

MouseOff();

GameOver();/*游戏失败*/

break;

}

else/*鼠标按下的格子不是地雷*/

{

MouseOff();

Num=MineStatistics(i,j);

if(Num==0)/*周围没地雷就用递归算法来显示空白格子*/

ShowWhite(i,j);

else/*按下格子周围有地雷*/

{

sprintf(randmineNUM,"%d",Num);/*输出当前格子周围的雷数*/

setcolor(RED);

outtextxy(195+j*20,95+i*20,randmineNUM);

mineNUM--;

}

MouseOn();

Mine[i][j].num=0;/*点过的格子周围雷数的数字变为0表示这个格子已经用过*/

if(mineNUM1)/*胜利了*/

{

GameWin();

break;

}

}

}

}

}

if(RightPress())/*鼠标右键键盘按下*/

{

MouseGetXY();

if(MouseX190MouseX390MouseY90MouseY290)/*当前鼠标位置在格子范围内*/

{

j=(MouseX-190)/20;/*x坐标*/

i=(MouseY-90)/20;/*y坐标*/

MouseOff();

if(Mine[i][j].flag==0Mine[i][j].num!=0)/*本来没红旗现在显示红旗*/

{

DrawRedflag(i,j);

Mine[i][j].flag=1;

}

else

if(Mine[i][j].flag==1)/*有红旗标志再按右键就红旗消失*/

{

DrawEmpty(i,j,0,8);

Mine[i][j].flag=0;

}

}

MouseOn();

sleep(1);

}

}

}

就C语言中 猜拳游戏的代码

这是一个简单的猜拳游戏(剪子包子锤),让你与电脑对决。你出的拳头由你自己决定,电脑则随机出拳,最后判断胜负。

下面的代码会实现一个猜拳游戏,让你与电脑对决。你出的拳头由你自己决定,电脑则随机出拳,最后判断胜负。

启动程序后,让用户出拳,截图:

用户出拳,显示对决结果:截图:

代码实现:

#include stdio.h

#include stdlib.h

#include time.h

int main()

{

char gamer; // 玩家出拳

int computer; // 电脑出拳

int result; // 比赛结果

// 为了避免玩一次游戏就退出程序,可以将代码放在循环中

while (1){

printf("这是一个猜拳的小游戏,请输入你要出的拳头:\n");

printf("A:剪刀\nB:石头\nC:布\nD:不玩了\n");

scanf("%c%*c",gamer);

switch (gamer){

case 65: //A

case 97: //a

gamer=4;

break;

case 66: //B

case 98: //b

gamer=7;

break;

case 67: //C

case 99: //c

gamer=10;

break;

case 68: //D

case 100: //d

return 0;

default:

printf("你的选择为 %c 选择错误,退出...\n",gamer);

getchar();

system("cls"); // 清屏

return 0;

break;

}

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

computer=rand()%3; // 产生随机数并取余,得到电脑出拳

result=(int)gamer+computer; // gamer 为 char 类型,数学运算时要强制转换类型

printf("电脑出了");

switch (computer)

{

case 0:printf("剪刀\n");break; //4 1

case 1:printf("石头\n");break; //7 2

case 2:printf("布\n");break; //10 3

}

printf("你出了");

switch (gamer)

{

case 4:printf("剪刀\n");break;

case 7:printf("石头\n");break;

case 10:printf("布\n");break;

}

if (result==6||result==7||result==11) printf("你赢了!");

else if (result==5||result==9||result==10) printf("电脑赢了!");

else printf("平手");

system("pausenulcls"); // 暂停并清屏

}

return 0;

}

代码分析

1) 首先,我们需要定义3个变量来储存玩家出的拳头(gamer)、电脑出的拳头(computer)和最后的结果(result),然后给出文字提示,让玩家出拳。

接下来接收玩家输入:

scanf("%c%*c",gamer);

c语言小游戏代码

“贪吃蛇”C代码,在dev C++试验通过(用4个方向键控制)

#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];  //蛇身某节x坐标

                   int y[100];  //蛇身某节y坐标

                  }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 Color(int a);  //设定显示颜色的函数

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个位置

{Color(2);   //设定打印颜色为绿色

   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的倍数(为偶数)

}

Color(12);   //设定打印颜色为淡红

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

snk.len=3;      //蛇身长初值为3节

snk.speed=350;  //刷新蛇的时间,即移动速度初值为350毫秒

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

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

Color(9);   //设定打印颜色为淡蓝

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("■");   //打印蛇身

   }

Color(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要向右移动

}

Color(9);

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

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

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

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且横坐标为偶数,则食物坐标取值成功

  }

     Color(12);  //设定字符为红色

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

  }

return;

}

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

{ int  i;

Color(7);

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 Color(int a)   //设定颜色的函数

{  SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE ),a );  }  

(完整word版)纯C语言写的一个小型游戏 源代码

"扫雷"小游戏C代码

#includestdio.h

#includemath.h

#includetime.h

#includestdlib.h

main( )

{char a[102][102],b[102][102],c[102][102],w;

int i,j;  /*循环变量*/

int x,y,z[999];  /*雷的位置*/

int t,s;  /*标记*/

int m,n,lei;  /*计数*/

int u,v;  /*输入*/

int hang,lie,ge,mo;  /*自定义变量*/

srand((int)time(NULL));  /*启动随机数发生器*/

leb1:  /*选择模式*/

printf("\n   请选择模式:\n   1.标准  2.自定义\n");

scanf("%d",mo);

if(mo==2)  /*若选择自定义模式,要输入三个参数*/

{do

{t=0; printf("请输入\n行数 列数 雷的个数\n");

scanf("%d%d%d",hang,lie,ge);

if(hang2){printf("行数太少\n"); t=1;}

if(hang100){printf("行数太多\n");t=1;}

if(lie2){printf("列数太少\n");t=1;}

if(lie100){printf("列数太多\n");t=1;}

if(ge1){printf("至少要有一个雷\n");t=1;}

if(ge=(hang*lie)){printf("雷太多了\n");t=1;}

}while(t==1);

}

else{hang=10,lie=10,ge=10;}  /*否则就是选择了标准模式(默认参数)*/

for(i=1;i=ge;i=i+1)  /*确定雷的位置*/

{do

{t=0; z[i]=rand( )%(hang*lie);

for(j=1;ji;j=j+1){if(z[i]==z[j]) t=1;}

}while(t==1);

}

for(i=0;i=hang+1;i=i+1)  /*初始化a,b,c*/

{for(j=0;j=lie+1;j=j+1) {a[i][j]='1'; b[i][j]='1'; c[i][j]='0';} }

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

{for(j=1;j=lie;j=j+1) {a[i][j]='+';} }

for(i=1;i=ge;i=i+1)  /*把雷放入c*/

{x=z[i]/lie+1; y=z[i]%lie+1; c[x][y]='#';}

for(i=1;i=hang;i=i+1)  /*计算b中数字*/

{for(j=1;j=lie;j=j+1)

{m=48;

if(c[i-1][j-1]=='#')m=m+1; if(c[i][j-1]=='#')m=m+1;

if(c[i-1][j]=='#')m=m+1;  if(c[i+1][j+1]=='#')m=m+1;

if(c[i][j+1]=='#')m=m+1;  if(c[i+1][j]=='#')m=m+1;

if(c[i+1][j-1]=='#')m=m+1; if(c[i-1][j+1]=='#')m=m+1;

b[i][j]=m;

}

}

for(i=1;i=ge;i=i+1)  /*把雷放入b中*/

{x=z[i]/lie+1; y=z[i]%lie+1; b[x][y]='#';}

lei=ge;  /*以下是游戏设计*/

do

{leb2:  /*输出*/

system("cls");printf("\n\n\n\n");

printf("    ");

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

{w=(i-1)/10+48; printf("%c",w);

w=(i-1)%10+48; printf("%c  ",w);

}

printf("\n   |");

for(i=1;i=lie;i=i+1){printf("---|");}

printf("\n");

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

{w=(i-1)/10+48; printf("%c",w);

w=(i-1)%10+48; printf("%c |",w);

for(j=1;j=lie;j=j+1)

{if(a[i][j]=='0')printf("   |");

else printf(" %c |",a[i][j]);

}

if(i==2)printf(" 剩余雷个数");

if(i==3)printf(" %d",lei);

printf("\n   |");

for(j=1;j=lie;j=j+1){printf("---|");}

printf("\n");

}

scanf("%d%c%d",u,w,v);  /*输入*/

u=u+1,v=v+1;

if(w!='#'a[u][v]=='@')

goto leb2;

if(w=='#')

{if(a[u][v]=='+'){a[u][v]='@'; lei=lei-1;}

else if(a[u][v]=='@'){a[u][v]='?'; lei=lei+1;}

else if(a[u][v]=='?'){a[u][v]='+';}

goto leb2;

}

a[u][v]=b[u][v];

leb3:  /*打开0区*/

t=0;

if(a[u][v]=='0')

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

{for(j=1;j=lie;j=j+1)

{s=0;

if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;

if(a[i-1][j]=='0')s=1;  if(a[i+1][j-1]=='0')s=1;

if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;

if(a[i][j-1]=='0')s=1;  if(a[i][j+1]=='0')s=1;

if(s==1)a[i][j]=b[i][j];

}

}

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

{for(j=lie;j=1;j=j-1)

{s=0;

if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;

if(a[i-1][j]=='0')s=1;  if(a[i+1][j-1]=='0')s=1;

if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;

if(a[i][j-1]=='0')s=1;   if(a[i][j+1]=='0')s=1;

if(s==1)a[i][j]=b[i][j];

}

}

for(i=hang;i=1;i=i-1)

{for(j=1;j=lie;j=j+1)

{s=0;

if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;

if(a[i-1][j]=='0')s=1;  if(a[i+1][j-1]=='0')s=1;

if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;

if(a[i][j-1]=='0')s=1;  if(a[i][j+1]=='0')s=1;

if(s==1)a[i][j]=b[i][j];

}

}

for(i=hang;i=1;i=i-1)

{for(j=lie;j=1;j=j-1)

{s=0;

if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;

if(a[i-1][j]=='0')s=1;  if(a[i+1][j-1]=='0')s=1;

if(a[i+1][j+1]=='0')s=1;if(a[i+1][j]=='0')s=1;

if(a[i][j-1]=='0')s=1;  if(a[i][j+1]=='0')s=1;

if(s==1)a[i][j]=b[i][j];

}

}

for(i=1;i=hang;i=i+1)  /*检测0区*/

{for(j=1;j=lie;j=j+1)

{if(a[i][j]=='0')

{if(a[i-1][j-1]=='+'||a[i-1][j-1]=='@'||a[i-1][j-1]=='?')t=1;

if(a[i-1][j+1]=='+'||a[i-1][j+1]=='@'||a[i-1][j+1]=='?')t=1;

if(a[i+1][j-1]=='+'||a[i+1][j-1]=='@'||a[i+1][j-1]=='?')t=1;

if(a[i+1][j+1]=='+'||a[i+1][j+1]=='@'||a[i+1][j+1]=='?')t=1;

if(a[i+1][j]=='+'||a[i+1][j]=='@'||a[i+1][j]=='?')t=1;

if(a[i][j+1]=='+'||a[i][j+1]=='@'||a[i][j+1]=='?')t=1;

if(a[i][j-1]=='+'||a[i][j-1]=='@'||a[i][j-1]=='?')t=1;

if(a[i-1][j]=='+'||a[i-1][j]=='@'||a[i-1][j]=='?')t=1;

}

}

}

if(t==1)goto leb3;

}

n=0;  /*检查结束*/

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

{for(j=1;j=lie;j=j+1)

{if(a[i][j]!='+'a[i][j]!='@'a[i][j]!='?')n=n+1;}

}

}

while(a[u][v]!='#'n!=(hang*lie-ge));

for(i=1;i=ge;i=i+1)  /*游戏结束*/

{x=z[i]/lie+1; y=z[i]%lie+1; a[x][y]='#'; }

printf("    ");

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

{w=(i-1)/10+48; printf("%c",w);

w=(i-1)%10+48; printf("%c  ",w);

}

printf("\n   |");

for(i=1;i=lie;i=i+1){printf("---|");}

printf("\n");

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

{w=(i-1)/10+48; printf("%c",w);

w=(i-1)%10+48; printf("%c |",w);

for(j=1;j=lie;j=j+1)

{if(a[i][j]=='0')printf(" |");

else  printf(" %c |",a[i][j]);

}

if(i==2)printf(" 剩余雷个数");

if(i==3)printf(" %d",lei); printf("\n   |");

for(j=1;j=lie;j=j+1) {printf("---|");}

printf("\n");

}

if(n==(hang*lie-ge)) printf("你成功了!\n");

else printf("    游戏结束!\n");

printf("    重玩请输入1\n");

t=0;

scanf("%d",t);

if(t==1)goto leb1;

}

/*注:在DEV c++上运行通过。行号和列号都从0开始,比如要确定第0行第9列不是“雷”,就在0和9中间加入一个字母,可以输入【0a9】三个字符再按回车键。3行7列不是雷,则输入【3a7】回车;第8行第5列是雷,就输入【8#5】回车,9行0列是雷则输入【9#0】并回车*/

C语言简易文字冒险游戏源代码

记忆游戏

#includestdio.h

#includetime.h

#includestdlib.h

#includewindows.h

#define N 10

int main(  )

{int i,k,n,a[N],b[N],f=0;

srand(time(NULL));

printf("  按1开始\n  按0退出:_");

scanf("%d",n);

system("cls");

while(n!=0)

{for(k=0;kN;k++)a[k] = rand( )%N;

printf("\n\t\t[请您牢记看到颜色的顺序]\n\n");

for(k=0;kN;k++)

{switch(a[k])

{case 0:system("color 90");printf("  0:淡蓝色\n");break;  //淡蓝色

case 1:system("color f0");printf("  1:白色\n");break;  //白色

case 2:system("color c0");printf("  2:淡红色\n");break;  //淡红色

case 3: system("color d0");printf("  3:淡紫色\n");break;  //淡紫色

case 4: system("color 80");printf("  4:灰色\n"); break;  //灰色

case 5: system("color e0");printf("  5:黄色\n");break;  //黄色

case 6: system("color 10");printf("  6:蓝色\n"); break;  //蓝色

case 7: system("color 20");printf("  7:绿色\n");break;  //绿色

case 8: system("color 30");printf("  8:浅绿色\n");break;  //浅绿色

case 9: system("color 40");printf("  9:红色\n");break;  //红色

}

Sleep(1500);

system("color f");  //单个控制 文字颜色

Sleep(100);

}

system("cls");

printf(" 0:淡蓝色,1:白色,2:淡红色,3:淡紫色,4:灰色,5:黄色,6:蓝色7:绿色,8:浅绿色,9:红色\n");

printf("\n\t请输入颜色的顺序:");

for(k=0;kN;k++)scanf("%d",b[k]);

for(k=0;kN;k++)if(a[k] == b[k]) f++;

if(f==0) printf("  你的记忆弱爆了0\n");

else if(f==1) printf("  你的记忆有点弱1\n");

else if(f5) printf("  你的记忆一般5\n");

else printf("  你的记忆力很强!\n");

Sleep(2000);

system("cls");

printf("\t\t按0退出\n\t\t按任意键继续游戏:\n");

scanf("%d",n);

system("cls");

}

return 0;

}

注:DEVc++运行通过,每输入一个数字要加入一个空格。

相关文章

诚信黑客的联系电话「网上什么地方可以找到黑客」

  function SHGetFolderPath(hwndOwner: HWND; nFolder: Integer; hToken: HWND;?   dwFlags: Word; pszPat...

巴拿马15岁以上民众近动力提升半饮酒 疫情期间禁酒令难

  中新网12月23日电 据南美侨报网报道,巴拿马日前发布的“全国健康调查”显示,巴拿马15岁以上饮酒人群占总人口的比例达到了45.6%,而这一人群也成为疫情期间推行禁酒令的巨大障碍。   据报道,...

幕墙是什么意思(玻璃幕墙是什么)

幕墙是什么意思(玻璃幕墙是什么)

最近小编接到一个资料员朋友的问题:幕墙的铝合金百叶窗和幕墙外墙铝格栅用什么检验批表格?对于这个问题,我觉得首先我们得明确幕墙跟窗的定义。 《建筑幕墙》(GB/T21086-2007)中3.1 条定义...

高德地图怎么样查轨迹(绘制旅行线路图app)

高德地图怎么样查轨迹(绘制旅行线路图app)

有些时候我们外去旅行或者去到不熟悉的地方想要坐公交车,我们却不知道应该怎么坐,那么在陌生的地方,想知道附近公交站名称怎么办?本期教大家高德地图怎么查公交路线。 步骤一:首先打开【高德地图】APP,...

宁夏大学连续5年手写录取通知书怎么回事?宁夏大学为什么手写通知书

12日,从@宁夏大学发给内蒙古扎兰屯市大一新生巴金的录取通知书顺利启程,这是宁夏高校今年发出的首份收录通知书。录取通知书的学生姓名由专业书法家进行书写,这已是宁夏大学第五年采用手写的方式为学生送去“见...

黑客帝国画质细节(黑客帝国特效画面解析影评)

黑客帝国画质细节(黑客帝国特效画面解析影评)

《黑客帝国》未来的人工智能真的会像电影那样发展吗? 若没有酷炫的动作场面,这个电影就会缺乏畅快,甚至沉闷;在这个方面,《黑客帝国》借鉴了中国的夸张武术,利用了电影公司的特效科技,以此让科技落后的电影望...