古老的c游戏用c语言编写小游戏写的

关于用C语言编写的小游戏的游戏代码,如黑白棋贪吃蛇等
关于用C语言编写的小游戏的游戏代码,如黑白棋贪吃蛇等
希望能在C语言环境下运行不是C++,程序尽量简单,万分感谢
补充:抱歉前面的#include后少了东西啊
#include #include #include #include #include #include
我这儿有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 co[8];}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, /*检查方快有没有左,右,下接触,游戏区内所有格子有无颜色记录数组,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 *register char buffer[24];register char str[2];/*fpos为最终偏移动量*/register int i,j,k;fp=fopen(hzk12,r);/*打开12*12汉字苦*/while(*s)/*一直到字符串结束为止*/{if(*s&0)/*汉字输出*/{ 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;i&12;i++)/*12行*/for(j=0;j&2;j++)/*两个字节*/for(k=0;k&8;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;i&7;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;elsereturn 0;}int finish(){ int tfull=0,i; /*判断顶层空间是否有填充*/ for(i=1;i&11;i++)tfull+=r_f[i][1];if(tfull!=0)return 1; /*告诉judge()可以结束了*/}int check_l() /*检查形状是否与左接触*/{ int x,y,i,zf=0;for(i=0;i&7;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-1][y-6];if(y&=6&&x==16)zf+=1;}if(zf==0)return 1;elsereturn 0;} int check_r() /*检查形状是否与右接触*/{ /*zf为是否有颜色填充记录*/int x,y,i,zf=0; /*zf为是否有颜色填充记录*/for(i=0;i&7;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+1][y-6];if(y&=6&&x==25)zf+=1;}if(zf==0)return 1;elsereturn 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;i&7;i++,i++){ RA.Rx+=p[rs1].co[i];RA.Ry+=p[rs1].co[i+1];if(RA.Ry&=6){ RA.Rx=RA.Ry=}translation();if(cb==1)setfillstyle(1,p[rs1].attr);elseif(cb==2)setfillstyle(1,BLACK);elseif(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=RA.Ry=}}void mov(int key) /*向下,左,右移动方块*/{ draw(2);if(key==LEFT&&nleft)RA.Rx--;elseif(key==RIGHT&&nright)RA.Rx++;elseRA.Ry++;nback=check_b();if(nback) /*判断形状有没有到达底部,有就将其颜色变为白色*/draw(1);elsedraw(3);}void change() /*变换形状*/{ int status=rs1,buffer,i,x,y,zf=0;if(p[rs1].attr==p[rs1+1].attr)rs1++;elsewhile(p[rs1].attr==p[rs1-1].attr)rs1--;for(i=0;i&7;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]; }if(zf!=0) rs1= buffer=rs1;rs1=status=draw(2);buffer=rs1;rs1=status=nback=check_b(); /*判断变化后的形状是不是到达了低部,这个检查是十分必要的*/if(nback) draw(1);elsedraw(3);}void accelerate(){ if(count_down&=1){ check_touch(); /*消除上一步动作对方块状态的影响*/count_down=0;if(nback) /*0表示到达底部,1表示没有到达*/mov(DOWN);}}void drawbox() /*画方块所在方框*/{ int xcor,for(xcor=xcor&=xcor++)for(ycor=ycor&=ycor++){ if(xcor==xcors||xcor==xcorb||ycor==ycors||ycor==ycorb){ RA.Rx=RA.Ry=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(;j&0;j--){ for(i=1;i&11;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);elsesetfillstyle(1,BLACK);bar(RA.x1+1,RA.y1+1,RA.x2-1,RA.y2-1);RA.Rx=RA.Ry=}}}}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,正常);}}void judge() { int i,j,full=0; /*full等于10说明某一行满,该消除了*/ if(finish()) /*判断游戏是否该结束了*/messagebox(); /*win编程里有这个函数*/ for(j=1;j&21;j++) /*判断某一行是否满了*/{ for(i=1;i&11;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;i&12;i++)for(j=0;j&22;j++)if(i==0||i==11||j==0||j==21)r_f[i][j]=1;elser_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(){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();}elseif(key==N){ clearkbd();EXIT();}elseclearkbd();}}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,RA.Rx=3;RA.Ry=7;draw(2);buffer=rs1;rs1=rs2;rs2=draw(1);RA.Rx=RA.Ry=buffer=rs1;rs1=rs2;rs2=}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==LEFT&&nleft&&nback)mov(LEFT); if(key==RIGHT&&nright&&nback)mov(RIGHT);if(key==UP&&nback) 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();}
sorry,前面是
#include &stdio.h&#include &conio.h&#include &dos.h&#include &graphics.h&#include &stdlib.h&#include &time.h&#include &bios.h&
相关知识等待您来回答
小游戏领域专家属于光的折射的是A古代潜望术B手影游戏C水鸟倒影_百度知道
属于光的折射的是A古代潜望术B手影游戏C水鸟倒影
提问者采纳
其他类似问题
手影的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁人人网-抱歉,没有找到该网页
你输入的网址可能不正确,或者该网页不存在。&或者
北京千橡网景科技发展有限公司:
文网文[号··京公网安备号·甲测资字
文化部监督电子邮箱:wlwh@··
文明办网文明上网举报电话: 举报邮箱:&&&&&&&&&&&&2058人阅读
本身这个游戏逻辑挺简单的,所以,不多说了,直接上代码吧
玩法说明:编译运行后,输入一个整数n,表示自己想玩的游戏中是n*n的表格,现在手机上或者电脑上一般都是4*4的,所以我们可以输入4,回车就可以开始游戏了。
游戏开始后a s d w表示方向左 下 右 上四个方向。&
正如真实版的2048一样,会输出两个表格,move 表格显示按输入方向平移后的结果,fill 表格显示又随机填充一个格子后的表格
#include &climits&
#include &cstdio&
#include &cstring&
#include &stack&
#include &string&
#include &map&
#include &vector&
#include &cmath&
const int MAXX = 10;
int box[MAXX][MAXX];
void moveLeft(int n, bool &ret){
for (int i = 0; i & ++i){
for (int j = 0; j & ++j){
for (k = j - 1; k &= 0; --k){
if (box[i][k] != -1){
box[i][k + 1] = box[i][j];
if ((k + 1) != j){
box[i][j] = -1;
void mergeLeft(int n, bool &ret){
for (int i = 0; i & ++i){
for (int j = 0; j & n - 1; ++j){
if (box[i][j] == -1)
if (box[i][j] == box[i][j + 1]){
box[i][j] *= 2;
box[i][j + 1] = -1;
bool left(int n){
bool ret =
moveLeft(n, ret);
mergeLeft(n, ret);
moveLeft(n, ret);
void moveRight(int n, bool &ret){
for (int i = 0; i & ++i){
for (int j = n - 1; j &= 0; --j){
if (box[i][j] == -1)
for (k = j + 1; k & ++k){
if (box[i][k] != -1){
box[i][k - 1] = box[i][j];
if ((k - 1) != j){
box[i][j] = -1;
void mergeRight(int n, bool &ret){
for (int i = 0; i & ++i){
for (int j = n - 1; j &0; --j){
if (box[i][j] == -1)
if (box[i][j] == box[i][j - 1]){
box[i][j] *= 2;
box[i][j - 1] = -1;
bool right(int n){
bool ret =
moveRight(n, ret);
mergeRight(n, ret);
moveRight(n, ret);
void moveUp(int n, bool &ret){
for (int j = 0; j & ++j){
for (int i = 0; i & ++i){
for (k = i - 1; k &= 0; --k){
if (box[k][j] != -1){
box[k + 1][j] = box[i][j];
if ((k + 1) != i){
box[i][j] = -1;
void mergeUp(int n, bool &ret){
for (int j = 0; j & ++j){
for (int i = 0; i & n - 1; ++i){
if (box[i][j] == -1)
if (box[i][j] == box[i + 1][j]){
box[i][j] *= 2;
box[i + 1][j] = -1;
bool up(int n){
bool ret =
moveUp(n, ret);
mergeUp(n, ret);
moveUp(n, ret);
void moveDown(int n, bool &ret){
for (int j = 0; j & ++j){
for (int i = n - 1; i &= 0; --i){
if (box[i][j] == -1)
for (k = i + 1; k & ++k){
if (box[k][j] != -1)
box[k - 1][j] = box[i][j];
if ((k - 1) != i){
box[i][j] = -1;
void mergeDown(int n, bool &ret){
for (int j = 0; j & ++j){
for (int i = n - 1; i & 0; --i){
if (box[i][j] == -1)
if (box[i][j] == box[i - 1][j]){
box[i][j] *= 2;
box[i - 1][j] = -1;
bool down(int n){
bool ret =
moveDown(n, ret);
mergeDown(n, ret);
moveDown(n, ret);
void line(int n){
for (int i = 0; i & ++i){
printf(&--------&);
printf(&-&);
printf(&\n&);
void print(int n){
for (int i = 0; i & ++i){
for (int j = 0; j & ++j){
printf(&|&);
if (box[i][j] == -1){
printf(&\t&);
printf(&%2d\t&, box[i][j]);
printf(&|&);
printf(&\n&);
bool isFull(int n){
bool mark =
for (int i = 0; i & ++i){
for (int j = 0; j & ++j){
if (box[i][j] == -1){
bool isOver(int n){
if (!isFull(n)){
for (int i = 0; i & ++i){
for (int j = 0; j & ++j){
if (box[i][j] == box[i][j + 1] || box[i][j] == box[i + 1][j]){
void fillBox(int n){
if (isFull(n)){
while (true){
i = rand() %
j = rand() %
num = rand() % 2 == 0 ? 2 : 4;
if (box[i][j] == -1){
box[i][j] =
int main(){
//freopen(&in.txt&, &r&, stdin);
memset(box, -1, sizeof(box));
scanf(&%d%*c&, &n);
fillBox(n);
fillBox(n);
while (true){
scanf(&%c%*c&, &ch);
if (ch == 'a'){
mark = left(n);
else if (ch == 'd'){
mark = right(n);
else if (ch == 'w'){
mark = up(n);
else if (ch == 's'){
mark = down(n);
system(&cls&);
printf(&Move:\n&);
if (!mark){
fillBox(n);
printf(&Fill:\n&);
if (isOver(n)){
printf(&\n\nGame Over!\n\n&);
只是玩了几局,没有很深度的找bug,所以可能会有bug。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:141243次
积分:4074
积分:4074
排名:第2567名
原创:205篇
转载:10篇
评论:130条
文章:19篇
阅读:14978
(2)(1)(2)(2)(2)(10)(12)(38)(38)(3)(8)(1)(6)(1)(1)(2)(4)(3)(1)(5)(16)(32)(25)GCT(语文)模拟试题题库
本试题来自:(2013年GCT(语文)模拟试题,)阅读下面短文,回答文后问题。
车站旁有一棵婆娑的老树。
老树下两个孩子做着游戏——
“我们都是木头人,不会说话不会动。一不许笑,二不许动,三不许交头接耳听。看谁的意志最坚定。”
我欣然一—这是一个古老的游戏了。
“我们都是木头人,不会说话不会动。一不许笑,二不许动,三不许交头接耳听。看谁的意志最坚定。”
我哑然一一这是一个古老的游戏了!
车不来。孩子依旧做着——
“我们都是木头人,不会说话不会动。一不许笑,二不许动,三不许交头接耳听。看谁的意志最坚定。”
我陶然——这是一个古老的游戏了!!
“我们都是木头人,不会说话不会动。一不许笑,二不许动,三不许交头接耳听。看谁的意志最坚定。”
我惘然——这是一个古老的游戏了!!!
车不来。孩子依旧做着——
“我们都是木头人,不会说话不会动。一不许笑,二不许动,三不许交头接耳听。看谁的意志最坚定。”
我慨然——这是一个古老的游戏了!!!!
“我们都是木头人,不会说话不会动。一不许笑,二不许动,三不许交头接耳听。看谁的意志最坚定。”
我愕然——这是一个古老的游戏了¨!!!
车依旧不来。孩子也依旧做着……
老树下——我已怆然!!!!!!
(路东之们!!!!!!》,载《世界华文微型小说大成•作品》,上海文艺出版社,1992)
(北京安通学校提供)三、阅读理解对以下词语理解错误的是:A.慨然——为什么要让孩子成为木头人呢我慨然不满。B.哑然——观看孩子做古老游戏而哑然不语,正在沉思。C.陶然——观看孩子做着古老游戏,感到陶然有趣。D.怆然——车依旧不来,我失望了。正确答案:有, 或者 答案解析:有,
您可能感兴趣的试题
单项选择题:()根据原文所给信息,以下推断正确的一项是:A.杜诗对后人思想感情的陶冶力量是巨大的。B.明清时代读书人在社交应酬活动中,必须吟五言律诗或七言律诗,以显其风雅。C.科举考试要求写“排律”形式的试贴诗,这是模仿杜诗中的“五排”而产生的。D.文士的性格是由杜甫思想塑造起来的,即使在今天,杜甫的思想也有积极意义。答案:有,答案解析:有,单项选择题:()下列对文章的分析和鉴赏,正确的一项是:
①文章首句着一“却”字,以作为江南人对莲本该不生疏却生疏来突出小莲池中莲的神韵美。
②“我迷失在画中,到现在还没有回来”这句让人感悟到,观察事物只要用心专一,仔细琢磨,了解规律,就会流连忘返。
③“意象”即境界,作者发现的莲的“绰约”意象,就是“水中的倒影是水上的华美和冷隽”。
④“我的莲既冷且热”,是说诗人笔下的莲,不同于画家画的苹果、向日葵那样冷暖有别,而是华美与冷隽的和谐统一。
⑤文章借助对比,以玫瑰“燃烧着西方的爽朗”,来突出莲“赧然低语”,如同东方女孩的含蓄美,褒贬适中,表达得体。⑥作者认为莲的小名应为水仙,因为她和水仙花一样同为水中仙子,飘逸而富于灵气,在水中都自成世界。A.①③④B.①②④C.③④⑤D.②④⑥答案:有,答案解析:有,
GCT(语文)模拟试题最新试卷
GCT(语文)模拟试题热门试卷

我要回帖

更多关于 c语言写小游戏 的文章

 

随机推荐