c++游戏代码大全(C++游戏代码大全可复制免费)

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

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++运行通过,每输入一个数字要加入一个空格。

关于用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语言小游戏源程序

我的楼主可以自己玩一下

试试吧

#define N 200

#include graphics.h

#include stdlib.h

#include dos.h

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define DOWN 0x5000

#define UP 0x4800

#define ESC 0x011b

int i,key;

int score=0;/*得分*/

int gamespeed=50000;/*游戏速度自己调整*/

struct Food

{

int x;/*食物的横坐标*/

int y;/*食物的纵坐标*/

int yes;/*判断是否要出现食物的变量*/

}food;/*食物的结构体*/

struct Snake

{

int x[N];

int y[N];

int node;/*蛇的节数*/

int direction;/*蛇移动方向*/

int life;/* 蛇的生命,0活着,1死亡*/

}snake;

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

void Close(void);/*图形结束*/

void DrawK(void);/*开始画面*/

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

void GamePlay(void);/*玩游戏具体过程*/

void PrScore(void);/*输出成绩*/

/*主函数*/

void main(void)

{

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

DrawK();/*开始画面*/

GamePlay();/*玩游戏具体过程*/

Close();/*图形结束*/

}

/*图形驱动*/

void Init(void)

{

int gd=DETECT,gm;

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

cleardevice();

}

/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/

void DrawK(void)

{

/*setbkcolor(LIGHTGREEN);*/

setcolor(11);

setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/

for(i=50;i=600;i+=10)/*画围墙*/

{

rectangle(i,40,i+10,49); /*上边*/

rectangle(i,451,i+10,460);/*下边*/

}

for(i=40;i=450;i+=10)

{

rectangle(50,i,59,i+10); /*左边*/

rectangle(601,i,610,i+10);/*右边*/

}

}

/*玩游戏具体过程*/

void GamePlay(void)

{

randomize();/*随机数发生器*/

food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/

snake.life=0;/*活着*/

snake.direction=1;/*方向往右*/

snake.x[0]=100;snake.y[0]=100;/*蛇头*/

snake.x[1]=110;snake.y[1]=100;

snake.node=2;/*节数*/

PrScore();/*输出得分*/

while(1)/*可以重复玩游戏,压ESC键结束*/

{

while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/

{

if(food.yes==1)/*需要出现新食物*/

{

food.x=rand()%400+60;

food.y=rand()%350+60;

while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/

food.x++;

while(food.y%10!=0)

food.y++;

food.yes=0;/*画面上有食物了*/

}

if(food.yes==0)/*画面上有食物了就要显示*/

{

setcolor(GREEN);

rectangle(food.x,food.y,food.x+10,food.y-10);

}

for(i=snake.node-1;i0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/

{

snake.x[i]=snake.x[i-1];

snake.y[i]=snake.y[i-1];

}

/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/

switch(snake.direction)

{

case 1:snake.x[0]+=10;break;

case 2: snake.x[0]-=10;break;

case 3: snake.y[0]-=10;break;

case 4: snake.y[0]+=10;break;

}

for(i=3;isnake.node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/

{

if(snake.x[i]==snake.x[0]snake.y[i]==snake.y[0])

{

GameOver();/*显示失败*/

snake.life=1;

break;

}

}

if(snake.x[0]55||snake.x[0]595||snake.y[0]55||

snake.y[0]455)/*蛇是否撞到墙壁*/

{

GameOver();/*本次游戏结束*/

snake.life=1; /*蛇死*/

}

if(snake.life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/

break;

if(snake.x[0]==food.xsnake.y[0]==food.y)/*吃到食物以后*/

{

setcolor(0);/*把画面上的食物东西去掉*/

rectangle(food.x,food.y,food.x+10,food.y-10);

snake.x[snake.node]=-20;snake.y[snake.node]=-20;

/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/

snake.node++;/*蛇的身体长一节*/

food.yes=1;/*画面上需要出现新的食物*/

score+=10;

PrScore();/*输出新得分*/

}

setcolor(4);/*画出蛇*/

for(i=0;isnake.node;i++)

rectangle(snake.x[i],snake.y[i],snake.x[i]+10,

snake.y[i]-10);

delay(gamespeed);

setcolor(0);/*用黑色去除蛇的的最后一节*/

rectangle(snake.x[snake.node-1],snake.y[snake.node-1],

snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);

} /*endwhile(!kbhit)*/

if(snake.life==1)/*如果蛇死就跳出循环*/

break;

key=bioskey(0);/*接收按键*/

if(key==ESC)/*按ESC键退出*/

break;

else

if(key==UPsnake.direction!=4)

/*判断是否往相反的方向移动*/

snake.direction=3;

else

if(key==RIGHTsnake.direction!=2)

snake.direction=1;

else

if(key==LEFTsnake.direction!=1)

snake.direction=2;

else

if(key==DOWNsnake.direction!=3)

snake.direction=4;

}/*endwhile(1)*/

}

/*游戏结束*/

void GameOver(void)

{

cleardevice();

PrScore();

setcolor(RED);

settextstyle(0,0,4);

outtextxy(200,200,"GAME OVER");

getch();

}

/*输出成绩*/

void PrScore(void)

{

char str[10];

setfillstyle(SOLID_FILL,YELLOW);

bar(50,15,220,35);

setcolor(6);

settextstyle(0,0,2);

sprintf(str,"score:%d",score);

outtextxy(55,20,str);

}

/*图形结束*/

void Close(void)

{

getch();

closegraph();

}

dev-c++中的c语言游戏代码是什么?

#include \x0d\x0a#include \x0d\x0a#include \x0d\x0a#include \x0d\x0a\x0d\x0a#define U 1\x0d\x0a#define D 2\x0d\x0a#define L 3\x0d\x0a#define R 4 //蛇的状态,U:上 ;D:下;L:左 R:右\x0d\x0a\x0d\x0atypedef struct SNAKE { //蛇身的一个节点\x0d\x0aint x;\x0d\x0aint y;\x0d\x0astruct SNAKE *next;\x0d\x0a} snake;\x0d\x0a\x0d\x0a//全局变量//\x0d\x0aint score=0,add=10;//总得分与每次吃食物得分。\x0d\x0aint status,sleeptime=200;//每次运行的时间间隔\x0d\x0asnake *head, *food;//蛇头指针,食物指针\x0d\x0asnake *q;//遍历蛇的时候用到的指针\x0d\x0aint endgamestatus=0; //游戏结束的情况,1:撞到墙;2:咬到自己;3:主动退出游戏。\x0d\x0a\x0d\x0a//声明全部函数//\x0d\x0avoid Pos();\x0d\x0avoid creatMap();\x0d\x0avoid initsnake();\x0d\x0aint biteself();\x0d\x0avoid createfood();\x0d\x0avoid cantcrosswall();\x0d\x0avoid snakemove();\x0d\x0avoid pause();\x0d\x0avoid gamecircle();\x0d\x0avoid welcometogame();\x0d\x0avoid endgame();\x0d\x0avoid gamestart();\x0d\x0a\x0d\x0avoid Pos(int x,int y)//设置光标位置\x0d\x0a{\x0d\x0aCOORD pos;\x0d\x0aHANDLE hOutput;\x0d\x0apos.X=x;\x0d\x0apos.Y=y;\x0d\x0ahOutput=GetStdHandle(STD_OUTPUT_HANDLE);\x0d\x0aSetConsoleCursorPosition(hOutput,pos);\x0d\x0a}\x0d\x0a\x0d\x0avoid creatMap()//创建地图\x0d\x0a{\x0d\x0aint i;\x0d\x0afor(i=0; ix=24;\x0d\x0atail-y=5;\x0d\x0atail-next=NULL;\x0d\x0afor(i=1; inext=tail;\x0d\x0ahead-x=24+2*i;\x0d\x0ahead-y=5;\x0d\x0atail=head;\x0d\x0a}\x0d\x0awhile(tail!=NULL) { //从头到为,输出蛇身\x0d\x0aPos(tail-x,tail-y);\x0d\x0aprintf("■");\x0d\x0atail=tail-next;\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0aint biteself()//判断是否咬到了自己\x0d\x0a{\x0d\x0asnake *self;\x0d\x0aself=head-next;\x0d\x0awhile(self!=NULL) {\x0d\x0aif(self-x==head-x self-y==head-y) {\x0d\x0areturn 1;\x0d\x0a}\x0d\x0aself=self-next;\x0d\x0a}\x0d\x0areturn 0;\x0d\x0a}\x0d\x0a\x0d\x0avoid createfood()//随机出现食物\x0d\x0a{\x0d\x0asnake *food_1;\x0d\x0asrand((unsigned)time(NULL));\x0d\x0afood_1=(snake*)malloc(sizeof(snake));\x0d\x0awhile((food_1-x%2)!=0) { //保证其为偶数,使得食物能与蛇头对其\x0d\x0afood_1-x=rand()%52+2;\x0d\x0a}\x0d\x0afood_1-y=rand()%24+1;\x0d\x0aq=head;\x0d\x0awhile(q-next==NULL) {\x0d\x0aif(q-x==food_1-x q-y==food_1-y) { //判断蛇身是否与食物重合\x0d\x0afree(food_1);\x0d\x0acreatefood();\x0d\x0a}\x0d\x0aq=q-next;\x0d\x0a}\x0d\x0aPos(food_1-x,food_1-y);\x0d\x0afood=food_1;\x0d\x0aprintf("■");\x0d\x0a}\x0d\x0a\x0d\x0avoid cantcrosswall()//不能穿墙\x0d\x0a{\x0d\x0aif(head-x==0 || head-x==56 ||head-y==0 || head-y==26) {\x0d\x0aendgamestatus=1;\x0d\x0aendgame();\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0avoid snakemove()//蛇前进,上U,下D,左L,右R\x0d\x0a{\x0d\x0asnake * nexthead;\x0d\x0acantcrosswall();\x0d\x0a\x0d\x0anexthead=(snake*)malloc(sizeof(snake));\x0d\x0aif(status==U) {\x0d\x0anexthead-x=head-x;\x0d\x0anexthead-y=head-y-1;\x0d\x0aif(nexthead-x==food-x nexthead-y==food-y) { //如果下一个有食物//\x0d\x0anexthead-next=head;\x0d\x0ahead=nexthead;\x0d\x0aq=head;\x0d\x0awhile(q!=NULL) {\x0d\x0aPos(q-x,q-y);\x0d\x0aprintf("■");\x0d\x0aq=q-next;\x0d\x0a}\x0d\x0ascore=score+add;\x0d\x0acreatefood();\x0d\x0a} else { //如果没有食物//\x0d\x0anexthead-next=head;\x0d\x0ahead=nexthead;\x0d\x0aq=head;\x0d\x0awhile(q-next-next!=NULL) {\x0d\x0aPos(q-x,q-y);\x0d\x0aprintf("■");\x0d\x0aq=q-next;\x0d\x0a}\x0d\x0aPos(q-next-x,q-next-y);\x0d\x0aprintf(" ");\x0d\x0afree(q-next);\x0d\x0aq-next=NULL;\x0d\x0a}\x0d\x0a}\x0d\x0aif(status==D) {\x0d\x0anexthead-x=head-x;\x0d\x0anexthead-y=head-y+1;\x0d\x0aif(nexthead-x==food-x nexthead-y==food-y) { //有食物\x0d\x0anexthead-next=head;\x0d\x0ahead=nexthead;\x0d\x0aq=head;\x0d\x0awhile(q!=NULL) {\x0d\x0aPos(q-x,q-y);\x0d\x0aprintf("■");\x0d\x0aq=q-next;\x0d\x0a}\x0d\x0ascore=score+add;\x0d\x0acreatefood();\x0d\x0a} else { //没有食物\x0d\x0anexthead-next=head;\x0d\x0ahead=nexthead;\x0d\x0aq=head;\x0d\x0awhile(q-next-next!=NULL) {\x0d\x0aPos(q-x,q-y);\x0d\x0aprintf("■");\x0d\x0aq=q-next;\x0d\x0a}\x0d\x0aPos(q-next-x,q-next-y);\x0d\x0aprintf(" ");\x0d\x0afree(q-next);\x0d\x0aq-next=NULL;\x0d\x0a}\x0d\x0a}\x0d\x0aif(status==L) {\x0d\x0anexthead-x=head-x-2;\x0d\x0anexthead-y=head-y;\x0d\x0aif(nexthead-x==food-x nexthead-y==food-y) { //有食物\x0d\x0anexthead-next=head;\x0d\x0ahead=nexthead;\x0d\x0aq=head;\x0d\x0awhile(q!=NULL) {\x0d\x0aPos(q-x,q-y);\x0d\x0aprintf("■");\x0d\x0aq=q-next;\x0d\x0a}\x0d\x0ascore=score+add;\x0d\x0acreatefood();\x0d\x0a} else { //没有食物\x0d\x0anexthead-next=head;\x0d\x0ahead=nexthead;\x0d\x0aq=head;\x0d\x0awhile(q-next-next!=NULL) {\x0d\x0aPos(q-x,q-y);\x0d\x0aprintf("■");\x0d\x0aq=q-next;\x0d\x0a}\x0d\x0aPos(q-next-x,q-next-y);\x0d\x0aprintf(" ");\x0d\x0afree(q-next);\x0d\x0aq-next=NULL;\x0d\x0a}\x0d\x0a}\x0d\x0aif(status==R) {\x0d\x0anexthead-x=head-x+2;\x0d\x0anexthead-y=head-y;\x0d\x0aif(nexthead-x==food-x nexthead-y==food-y) { //有食物\x0d\x0anexthead-next=head;\x0d\x0ahead=nexthead;\x0d\x0aq=head;\x0d\x0awhile(q!=NULL) {\x0d\x0aPos(q-x,q-y);\x0d\x0aprintf("■");\x0d\x0aq=q-next;\x0d\x0a}\x0d\x0ascore=score+add;\x0d\x0acreatefood();\x0d\x0a} else { //没有食物\x0d\x0anexthead-next=head;\x0d\x0ahead=nexthead;\x0d\x0aq=head;\x0d\x0awhile(q-next-next!=NULL) {\x0d\x0aPos(q-x,q-y);\x0d\x0aprintf("■");\x0d\x0aq=q-next;\x0d\x0a}\x0d\x0aPos(q-next-x,q-next-y);\x0d\x0aprintf(" ");\x0d\x0afree(q-next);\x0d\x0aq-next=NULL;\x0d\x0a}\x0d\x0a}\x0d\x0aif(biteself()==1) { //判断是否会咬到自己\x0d\x0aendgamestatus=2;\x0d\x0aendgame();\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0avoid pause()//暂停\x0d\x0a{\x0d\x0awhile(1) {\x0d\x0aSleep(300);\x0d\x0aif(GetAsyncKeyState(VK_SPACE)) {\x0d\x0abreak;\x0d\x0a}\x0d\x0a\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0avoid gamecircle()//控制游戏\x0d\x0a{\x0d\x0a\x0d\x0aPos(64,15);\x0d\x0aprintf("不能穿墙,不能咬到自己\n");\x0d\x0aPos(64,16);\x0d\x0aprintf("用↑.↓.←.→分别控制蛇的移动.");\x0d\x0aPos(64,17);\x0d\x0aprintf("F1 为加速,F2 为减速\n");\x0d\x0aPos(64,18);\x0d\x0aprintf("ESC :退出游戏.space:暂停游戏.");\x0d\x0aPos(64,20);\x0d\x0a//\x0d\x0astatus=R;\x0d\x0awhile(1) {\x0d\x0aPos(64,10);\x0d\x0aprintf("得分:%d ",score);\x0d\x0aPos(64,11);\x0d\x0aprintf("每个食物得分:%d分",add);\x0d\x0aif(GetAsyncKeyState(VK_UP) status!=D) {\x0d\x0astatus=U;\x0d\x0a} else if(GetAsyncKeyState(VK_DOWN) status!=U) {\x0d\x0astatus=D;\x0d\x0a} else if(GetAsyncKeyState(VK_LEFT) status!=R) {\x0d\x0astatus=L;\x0d\x0a} else if(GetAsyncKeyState(VK_RIGHT) status!=L) {\x0d\x0astatus=R;\x0d\x0a} else if(GetAsyncKeyState(VK_SPACE)) {\x0d\x0apause();\x0d\x0a} else if(GetAsyncKeyState(VK_ESCAPE)) {\x0d\x0aendgamestatus=3;\x0d\x0abreak;\x0d\x0a} else if(GetAsyncKeyState(VK_F1)) {\x0d\x0aif(sleeptime=50) {\x0d\x0asleeptime=sleeptime-30;\x0d\x0aadd=add+2;\x0d\x0aif(sleeptime==320) {\x0d\x0aadd=2;//防止减到1之后再加回来有错\x0d\x0a}\x0d\x0a}\x0d\x0a} else if(GetAsyncKeyState(VK_F2)) {\x0d\x0aif(sleeptime

回答于?2022-11-16

用C++编写的小游戏源代码

五子棋的代码:

#includeiostream

#includestdio.h

#includestdlib.h

#includetime.h

usingnamespacestd;

constintN=15;?????????//15*15的棋盘

constcharChessBoardflag='';?????//棋盘标志

constcharflag1='o';???????//玩家1或电脑的棋子标志

constcharflag2='X';???????//玩家2的棋子标志

typedefstructCoordinate?????//坐标类

{

intx;?????????????//代表行

inty;?????????????//代表列

}Coordinate;

classGoBang??????????//五子棋类

{

public:

GoBang()????????//初始化

{

InitChessBoard();

}

voidPlay()????????//下棋

{

CoordinatePos1;???//玩家1或电脑

CoordinatePos2;???//玩家2

intn=0;

while(1)

{

intmode=ChoiceMode();

while(1)

{

if(mode==1)????//电脑vs玩家

{

ComputerChess(Pos1,flag1);???//电脑下棋

if(GetVictory(Pos1,0,flag1)==1)???//0表示电脑,真表示获胜

break;

PlayChess(Pos2,2,flag2);???//玩家2下棋

if(GetVictory(Pos2,2,flag2))???//2表示玩家2

break;

}

else??????//玩家1vs玩家2

{

PlayChess(Pos1,1,flag1);???//玩家1下棋

if(GetVictory(Pos1,1,flag1))???//1表示玩家1

break;

PlayChess(Pos2,2,flag2);???//玩家2下棋

if(GetVictory(Pos2,2,flag2))?//2表示玩家2

break;

}

}

cout"***再来一局***"endl;

cout"yorn:";

charc='y';

cinc;

if(c=='n')

break;

}

}

protected:

intChoiceMode()??????//选择模式

{

inti=0;

system("cls");????//系统调用,清屏

InitChessBoard();????//重新初始化棋盘

cout"***0、退出?1、电脑vs玩家?2、玩家vs玩家***"endl;

while(1)

{

cout"请选择:";

cini;

if(i==0)?????//选择0退出

exit(1);

if(i==1||i==2)

returni;

cout"输入不合法"endl;

}

}

voidInitChessBoard()???//初始化棋盘

{

for(inti=0;iN+1;++i)

{

for(intj=0;jN+1;++j)

{

_ChessBoard[i][j]=ChessBoardflag;

}

}

}

voidPrintChessBoard()??//打印棋盘,这个函数可以自己调整

{

system("cls");????????//系统调用,清空屏幕

for(inti=0;iN+1;++i)

{

for(intj=0;jN+1;++j)

{

if(i==0)????????????????//打印列数字

{

if(j!=0)

printf("%d?",j);

else

printf("??");

}

elseif(j==0)????????//打印行数字

printf("%2d",i);

else

{

if(iN+1)

{

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

}

}

}

coutendl;

cout"??";

for(intm=0;mN;m++)

{

printf("--|");

}

coutendl;

}

}

voidPlayChess(Coordinatepos,intplayer,intflag)????//玩家下棋

{

PrintChessBoard();?????//打印棋盘

while(1)

{

printf("玩家%d输入坐标:",player);

cinpos.xpos.y;

if(JudgeValue(pos)==1)?????//坐标合法

break;

cout"坐标不合法,重新输入"endl;

}

_ChessBoard[pos.x][pos.y]=flag;

}

voidComputerChess(Coordinatepos,charflag)????//电脑下棋

{

PrintChessBoard();?????//打印棋盘

intx=0;

inty=0;

while(1)

{

x=(rand()%N)+1;???//产生1~N的随机数

srand((unsignedint)time(NULL));

y=(rand()%N)+1;???//产生1~N的随机数

srand((unsignedint)time(NULL));

if(_ChessBoard[x][y]==ChessBoardflag)???//如果这个位置是空的,也就是没有棋子

break;

}

pos.x=x;

pos.y=y;

_ChessBoard[pos.x][pos.y]=flag;

}

intJudgeValue(constCoordinatepos)????//判断输入坐标是不是合法

{

if(pos.x0pos.x=Npos.y0pos.y=N)

{

if(_ChessBoard[pos.x][pos.y]==ChessBoardflag)

{

return1;??//合法

}

}

return0;????//非法

}

intJudgeVictory(Coordinatepos,charflag)??????//判断有没有人胜负(底层判断)

{

intbegin=0;

intend=0;

intbegin1=0;

intend1=0;

//判断行是否满足条件

(pos.y-4)0?begin=(pos.y-4):begin=1;

(pos.y+4)N?end=N:end=(pos.y+4);

for(inti=pos.x,j=begin;j+4=end;j++)

{

if(_ChessBoard[i][j]==flag_ChessBoard[i][j+1]==flag

_ChessBoard[i][j+2]==flag_ChessBoard[i][j+3]==flag

_ChessBoard[i][j+4]==flag)

return1;

}

//判断列是否满足条件

(pos.x-4)0?begin=(pos.x-4):begin=1;

(pos.x+4)N?end=N:end=(pos.x+4);

for(intj=pos.y,i=begin;i+4=end;i++)

{

if(_ChessBoard[i][j]==flag_ChessBoard[i+1][j]==flag

_ChessBoard[i+2][j]==flag_ChessBoard[i+3][j]==flag

_ChessBoard[i+4][j]==flag)

return1;

}

intlen=0;

//判断主对角线是否满足条件

pos.xpos.y?len=pos.y-1:len=pos.x-1;

if(len4)

len=4;

begin=pos.x-len;????//横坐标的起始位置

begin1=pos.y-len;???//纵坐标的起始位置

pos.xpos.y?len=(N-pos.x):len=(N-pos.y);

if(len4)

len=4;

end=pos.x+len;????//横坐标的结束位置

end1=pos.y+len;???//纵坐标的结束位置

for(inti=begin,j=begin1;(i+4=end)(j+4=end1);++i,++j)

{

if(_ChessBoard[i][j]==flag_ChessBoard[i+1][j+1]==flag

_ChessBoard[i+2][j+2]==flag_ChessBoard[i+3][j+3]==flag

_ChessBoard[i+4][j+4]==flag)

return1;

}

//判断副对角线是否满足条件

(pos.x-1)(N-pos.y)?len=(N-pos.y):len=pos.x-1;

if(len4)

len=4;

begin=pos.x-len;????//横坐标的起始位置

begin1=pos.y+len;???//纵坐标的起始位置

(N-pos.x)(pos.y-1)?len=(pos.y-1):len=(N-pos.x);

if(len4)

len=4;

end=pos.x+len;????//横坐标的结束位置

end1=pos.y-len;???//纵坐标的结束位置

for(inti=begin,j=begin1;(i+4=end)(j-4=end1);++i,--j)

{

if(_ChessBoard[i][j]==flag_ChessBoard[i+1][j-1]==flag

_ChessBoard[i+2][j-2]==flag_ChessBoard[i+3][j-3]==flag

_ChessBoard[i+4][j-4]==flag)

return1;

}

for(inti=1;iN+1;++i)??????//棋盘有没有下满

{

for(intj=1;jN+1;++j)

{

if(_ChessBoard[i][j]==ChessBoardflag)

return0;???????????//0表示棋盘没满

}

}

return-1;???//和棋

}

boolGetVictory(Coordinatepos,intplayer,intflag)??//对JudgeVictory的一层封装,得到具体那个玩家获胜

{

intn=JudgeVictory(pos,flag);??//判断有没有人获胜

if(n!=0)??????????//有人获胜,0表示没有人获胜

{

PrintChessBoard();

if(n==1)????????//有玩家赢棋

{

if(player==0)???//0表示电脑获胜,1表示玩家1,2表示玩家2

printf("***电脑获胜***\n");

else

printf("***恭喜玩家%d获胜***\n",player);

}

else

printf("***双方和棋***\n");

returntrue;???//已经有人获胜

}

returnfalse;??//没有人获胜

}

private:

char_ChessBoard[N+1][N+1];

};

扩展资料:

设计思路

1、进行问题分析与设计,计划实现的功能为,开局选择人机或双人对战,确定之后比赛开始。

2、比赛结束后初始化棋盘,询问是否继续比赛或退出,后续可加入复盘、悔棋等功能。

3、整个过程中,涉及到了棋子和棋盘两种对象,同时要加上人机对弈时的AI对象,即涉及到三个对象。

用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教学网)

更多

推荐新手入门文章