
本原代码是基于C语言的原程序。是经典中的小游戏。-primitive code is based on the C language of the original procedure Classic is a small game
一个小游戏,用C语言编写的:俄罗斯方块.C原码及应用程序都在里面哦 -a small game using the C language : Russian cubes The original C code and application procedures inside oh
十全十美游戏原程序,c语言-perfect game program, language c
上数据结构时,自己用C语言做的小游戏,做得不好,请大家原谅。-structure on the data they used C language to the small games, done well, please forgive me
大家都耍过文曲星中的猜数字的游戏吧 !! 最近我在学习C语言。写了个菜鸟的C语言的猜数字的游戏程序的原代码-rings off the viewing of the game! ! I recently learning C language Wrote a birdie C language viewing of the games original code procedures
这是我在大学二年级学习C语言课程时,作为“练笔”而编写的一个小程序(当时在我眼里可却是一个大程序!)其主要特点有:1、正真做到了全中文界面(不需要UCDOS *** 作系支持) 2、大量的图形特技(如图像的显隐技术、图像穿插技术、多任务仿真技术等) 3、纯C语言打造(不含任何C++知识) 4、实现了街机“俄罗斯方块”绝大部分功能(如动画、声音、速度变化) 5、用户可根据自据的习惯自由地调整“游戏 *** 作键” 6、方法独特,全部语句和技术都是我本人原创,没有参考过任何相关代码 7、防“跟踪调试”技术,防“版权篡改”技术 8、……-
这个程序是模仿Windows中的扫雷小游戏制作的,该程序只是实现了扫雷游戏的主体部分,诸如计分、升级部分都没有做。这个程序可以作为初学者学习C语言绘图和游戏的实例。 该程序在Turbo C20 下编译通过 由于扫雷游戏是用鼠标 *** 作的,而Turbo C中提供的鼠标驱动程序在Windows xp下不可用,所以我随源程序提供了一个鼠标驱动的头文件,须将将该头文件复制到Turbo C20 的安装目录下的“include”文件夹中方可编译或运行,也可自行修改原文件使之包含该投文件。 注:该鼠标驱动程序是我在网上找到的,其出处我已无法考证,如果侵犯了作者的权利还请作者与我联系。 由于在我的电脑上Turbo C图形环境下显示数字会有问题(估计是系统问题),所以程序中雷周围的数字1-8我用a-h代替,看不顺眼的可以自己修改原程序。-
c语言 猜拳游戏的原代码就是这个 已经测试成功了呀-language of the original game is the code has been tested successfully ah
俄罗斯方块对战版c语言原代码。希望大家能喜欢。是比较简单的一个代码,游戏开发高手请指教。-Tetris screen version of the original C language code Hope you will like It is a relatively simple code, game development experts please advise
用linuX 下的C语言 运用CURSES编写的俄罗斯方块游戏,很好,这个是本人原创,值得参考-linuX use the C language CURSES prepared by the Russian box game, well, this is the original, worthy of reference
C语言可以编手机游戏 你叫他去死 不过我这有 贪吃蛇的代码,你倒可以看看 (用TC 编译一定过)
#include
#include
#include
#include
#include
#define Enter 7181
#define ESC 283
#define UP 18432
#define DOWN 20480
#define LEFT 19200
#define RIGHT 19712
#ifdef __cplusplus
#define __CPPARGS
#else
#define __CPPARGS
#endif
void interrupt (oldhandler)(__CPPARGS);
void interrupt newhandler(__CPPARGS);
void SetTimer(void interrupt (IntProc)(__CPPARGS));
void KillTimer(void);
void Initgra(void);
void TheFirstBlock(void);
void DrawMap(void);
void Initsnake(void);
void Initfood(void);
void Snake_Headmv(void);
void Flag(int,int,int,int);
void GameOver(void);
void Snake_Bodymv(void);
void Snake_Bodyadd(void);
void PrntScore(void);
void Timer(void);
void Win(void);
void TheSecondBlock(void);
void Food(void);
void Dsnkorfd(int,int,int);
void Delay(int);
struct Snake
{int x;int y;int color;}Snk[12];
struct Food
{int x;int y;int color;}Fd;
int flag1=1,flag2=0,flag3=0,flag4=0,flag5=0,flag6=0,
checkx,checky,num,key=0,Times,Score,Hscore,Snkspeed,TimerCounter,TureorFalse;
char Sco[2],Time[6];
void main()
{ Initgra();
SetTimer(newhandler);
TheFirstBlock();
while(1)
{DrawMap();
Snake_Headmv();
GameOver();
Snake_Bodymv();
Snake_Bodyadd();
PrntScore();
Timer();
Win();
if(key==ESC)
break;
if(key==Enter)
{cleardevice();
TheFirstBlock();
}
TheSecondBlock();
Food();
Delay(Snkspeed);
}
closegraph();
KillTimer();
}
void interrupt newhandler(__CPPARGS)
{
TimerCounter++;
oldhandler();
}
void SetTimer(void interrupt (IntProc)(__CPPARGS))
{
oldhandler=getvect(0x1c);
disable();
setvect(0x1c,IntProc);
enable();
}
void KillTimer()
{
disable();
setvect(0x1c,oldhandler);
enable();
}
void Initgra()
{int gd=DETECT,gm;
initgraph(&gd,&gm,"d:\\tc");
}
void TheFirstBlock()
{setcolor(11);
settextstyle(0,0,4);
outtextxy(100,220,"The First Block");
loop:key=bioskey(0);
if(key==Enter)
{cleardevice();
Initsnake();
Initfood();
Score=0;
Hscore=1;
Snkspeed=10;
num=2;
Times=0;
key=0;
TureorFalse=1;
TimerCounter=0;
Time[0]='0';Time[1]='0';Time[2]=':';Time[3]='1';Time[4]='0';Time[5]='\0';
}
else if(key==ESC) cleardevice();
else goto loop;
}
void DrawMap()
{line(10,10,470,10);
line(470,10,470,470);
line(470,470,10,470);
line(10,470,10,10);
line(480,20,620,20);
line(620,20,620,460);
line(620,460,480,460);
line(480,460,480,20);
}
void Initsnake()
{randomize();
num=2;
Snk[0]x=random(440);
Snk[0]x=Snk[0]x-Snk[0]x%20+50;
Snk[0]y=random(440);
Snk[0]y=Snk[0]y-Snk[0]y%20+50;
Snk[0]color=4;
Snk[1]x=Snk[0]x;
Snk[1]y=Snk[0]y+20;
Snk[1]color=4;
}
void Initfood()
{randomize();
Fdx=random(440);
Fdx=Fdx-Fdx%20+30;
Fdy=random(440);
Fdy=Fdy-Fdy%20+30;
Fdcolor=random(14)+1;
}
void Snake_Headmv()
{if(bioskey(1))
{key=bioskey(0);
switch(key)
{case UP:Flag(1,0,0,0);break;
case DOWN:Flag(0,1,0,0);break;
case LEFT:Flag(0,0,1,0);break;
case RIGHT:Flag(0,0,0,1);break;
default:break;
}
}
if(flag1)
{checkx=Snk[0]x;
checky=Snk[0]y;
Dsnkorfd(Snk[0]x,Snk[0]y,0);
Snk[0]y-=20;
Dsnkorfd(Snk[0]x,Snk[0]y,Snk[0]color);
}
if(flag2)
{checkx=Snk[0]x;
checky=Snk[0]y;
Dsnkorfd(Snk[0]x,Snk[0]y,0);
Snk[0]y+=20;
Dsnkorfd(Snk[0]x,Snk[0]y,Snk[0]color);
}
if(flag3)
{checkx=Snk[0]x;
checky=Snk[0]y;
Dsnkorfd(Snk[0]x,Snk[0]y,0);
Snk[0]x-=20;
Dsnkorfd(Snk[0]x,Snk[0]y,Snk[0]color);
}
if(flag4)
{checkx=Snk[0]x;
checky=Snk[0]y;
Dsnkorfd(Snk[0]x,Snk[0]y,0);
Snk[0]x+=20;
Dsnkorfd(Snk[0]x,Snk[0]y,Snk[0]color);
}
}
void Flag(int a,int b,int c,int d)
{flag1=a;flag2=b;flag3=c;flag4=d;}
void GameOver()
{int i;
if(Snk[0]x460||Snk[0]y460)
{cleardevice();
setcolor(11);
settextstyle(0,0,4);
outtextxy(160,220,"Game Over");
loop1:key=bioskey(0);
if(key==Enter)
{cleardevice();
TheFirstBlock();
}
else
if(key==ESC)
cleardevice();
else
goto loop1;
}
for(i=3;i<num;i++)
{if(Snk[0]x==Snk[i]x&&Snk[0]y==Snk[i]y)
{cleardevice();
setcolor(11);
settextstyle(0,0,4);
outtextxy(160,220,"Game Over");
loop2:key=bioskey(0);
if(key==Enter)
{cleardevice();
TheFirstBlock();
}
else
if(key==ESC)
cleardevice();
else goto loop2;
}
}
}
void Snake_Bodymv()
{int i,s,t;
for(i=1;i<num;i++)
{Dsnkorfd(checkx,checky,Snk[i]color);
Dsnkorfd(Snk[i]x,Snk[i]y,0);
s=Snk[i]x;
t=Snk[i]y;
Snk[i]x=checkx;
Snk[i]y=checky;
checkx=s;
checky=t;
}
}
void Food()
{if(flag5)
{randomize();
Fdx=random(440);
Fdx=Fdx-Fdx%20+30;
Fdy=random(440);
Fdy=Fdy-Fdy%20+30;
Fdcolor=random(14)+1;
flag5=0;
}
Dsnkorfd(Fdx,Fdy,Fdcolor);
}
void Snake_Bodyadd()
{if(Snk[0]x==Fdx&&Snk[0]y==Fdy)
{if(Snk[num-1]x>Snk[num-2]x)
{num++;
Snk[num-1]x=Snk[num-2]x+20;
Snk[num-1]y=Snk[num-2]y;
Snk[num-1]color=Fdcolor;
}
else
if(Snk[num-1]x<Snk[num-2]x)
{num++;
Snk[num-1]x=Snk[num-2]x-20;
Snk[num-1]y=Snk[num-2]y;
Snk[num-1]color=Fdcolor;
}
else
if(Snk[num-1]y>Snk[num-2]y)
{num++;
Snk[num-1]x=Snk[num-2]x;
Snk[num-1]y=Snk[num-2]y+20;
Snk[num-1]color=Fdcolor;
}
else
if(Snk[num-1]y<Snk[num-2]y)
{num++;
Snk[num-1]x=Snk[num-2]x;
Snk[num-1]y=Snk[num-2]y-20;
Snk[num-1]color=Fdcolor;
}
flag5=1;
Score++;
}
}
void PrntScore()
{if(Hscore!=Score)
{setcolor(11);
settextstyle(0,0,3);
outtextxy(490,100,"SCORE");
setcolor(2);
setfillstyle(1,0);
rectangle(520,140,580,180);
floodfill(530,145,2);
Sco[0]=(char)(Score+48);
Sco[1]='\0';
Hscore=Score;
setcolor(4);
settextstyle(0,0,3);
outtextxy(540,150,Sco);
}
}
void Timer()
{if(TimerCounter>18)
{Time[4]=(char)(Time[4]-1);
if(Time[4]<'0')
{Time[4]='9';
Time[3]=(char)(Time[3]-1);
}
if(Time[3]<'0')
{Time[3]='5';
Time[1]=(char)(Time[1]-1);
}
if(TureorFalse)
{setcolor(11);
settextstyle(0,0,3);
outtextxy(490,240,"TIMER");
setcolor(2);
setfillstyle(1,0);
rectangle(490,280,610,320);
floodfill(530,300,2);
setcolor(11);
settextstyle(0,0,3);
outtextxy(495,290,Time);
TureorFalse=0;
}
if(Time[1]=='0'&&Time[3]=='0'&&Time[4]=='0')
{setcolor(11);
settextstyle(0,0,4);
outtextxy(160,220,"Game Over");
loop:key=bioskey(0);
if(key==Enter)
{cleardevice();
TheFirstBlock();
}
else if(key==ESC) cleardevice();
else goto loop;
}
TimerCounter=0;
TureorFalse=1;
}
}
void Win()
{if(Score==3)
Times++;
if(Times==2)
{cleardevice();
setcolor(11);
settextstyle(0,0,4);
outtextxy(160,220,"You Win");
loop:key=bioskey(0);
if(key==Enter)
{cleardevice();
TheFirstBlock();
key=0;
}
else if(key==ESC) cleardevice();
else goto loop;
}
}
void TheSecondBlock()
{if(Score==3)
{cleardevice();
setcolor(11);
settextstyle(0,0,4);
outtextxy(100,220,"The Second Block");
loop:key=bioskey(0);
if(key==Enter)
{cleardevice();
Initsnake();
Initfood();
Score=0;
Hscore=1;
Snkspeed=8;
num=2;
key=0;
}
else if(key==ESC) cleardevice();
else goto loop;
}
}
void Dsnkorfd(int x,int y,int color)
{setcolor(color);
setfillstyle(1,color);
circle(x,y,10);
floodfill(x,y,color);
}
void Delay(int times)
{int i;
for(i=1;i<=times;i++)
delay(15000);
}
我这儿有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);/打开1212汉字苦/
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[i2+j]>>(7-k))&0x1)!=NULL)/是一就画点/
putpixel(x0+8j+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(RARx==1)
{ RAx1=1; RAx2=16; }
else
{ RAx1=16(RARx-1); RAx2=16RARx; }
if(RARy==1)
{ RAy1=1; RAy2=16; }
else
{ RAy1=16(RARy-1); RAy2=16RARy; }
}
int check_b() /检查是否到达低部/
{ int x,y,i,zf=0; /zf为是否有颜色填充记录/
for(i=0;i<7;i++,i++)
{ x=RARx+p[rs1]co[i];
y=RARy+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;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=RARx+p[rs1]co[i];
y=RARy+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;
else
return 0;
}
int check_r() /检查形状是否与右接触/
{ /zf为是否有颜色填充记录/
int x,y,i,zf=0; /zf为是否有颜色填充记录/
for(i=0;i<7;i++,i++)
{
x=RARx+p[rs1]co[i];
y=RARy+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;
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=RARx,recordy=RARy;
for(i=0;i<7;i++,i++)
{ RARx+=p[rs1]co[i];
RARy+=p[rs1]co[i+1];
if(RARy<=6)
{ RARx=recordx;
RARy=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[RARx-15][RARy-6]=1; /置对应数组标记元素/
}
bar(RAx1+1,RAy1+1,RAx2-1,RAy2-1);
RARx=recordx;
RARy=recordy;
}
}
void mov(int key) /向下,左,右移动方块/
{ draw(2);
if(key==LEFT&&nleft)
RARx--;
else
if(key==RIGHT&&nright)
RARx++;
else
RARy++;
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;i<7;i++,i++) /检查变化形状后是否与已存形状发生冲突/
{ x=RARx+p[rs1]co[i];
y=RARy+p[rs1]co[i+1];
if(y>6)
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)
{ RARx=xcor;
RARy=ycor;
translation();
setfillstyle(1,DARKGRAY);
bar(RAx1+1,RAy1+1,RAx2-1,RAy2-1);
}
}
}
void erasure(int k)
{ int i,j,recordx=RARx,recordy=RARy;
{ j=k-1;
for(;j>0;j--)
{ for(i=1;i<11;i++)
{ r_f[i][j+1]=r_f[i][j];
RARx=i+15;
RARy=j+1+6;
translation();
if(r_f[i][j+1]==1)
setfillstyle(1,WHITE);
else
setfillstyle(1,BLACK);
bar(RAx1+1,RAy1+1,RAx2-1,RAy2-1);
RARx=recordx;
RARy=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;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;
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()
{ RARx=18;
RARy=6-p[rs1]co[7];;
RAx1=0;
RAx2=0;
RAy1=0;
RAy2=0;
}
void next_shape() /画下一形状提示框/
{ int recordx=RARx,recordy=RARy,buffer;
RARx=3;
RARy=7;
draw(2);
buffer=rs1;
rs1=rs2;
rs2=buffer;
draw(1);
RARx=recordx;
RARy=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==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();
}
// Calcu24cpp : Defines the entry point for the console application
//
/
6-6
24点游戏
/
#include "conioh"
#include "stdlibh"
#include "timeh"
#include "mathh"
#include "stringh"/
从一副扑克牌中,任取4张。
2-10 按其点数计算(为了表示方便10用T表示),J,Q,K,A 统一按 1 计算
要求通过加减乘除四则运算得到数字 24。
本程序可以随机抽取纸牌,并用试探法求解。
/void GivePuzzle(char buf)
{
char card[] = {'A','2','3','4','5','6','7','8','9','T','J','Q','K'}; for(int i=0; i<4; i++){
buf[i] = card[rand() % 13];
}
}
void shuffle(char buf)
{
for(int i=0; i<5; i++){
int k = rand() % 4;
char t = buf[k];
buf[k] = buf[0];
buf[0] = t;
}
}
int GetCardValue(int c)
{
if(c=='T') return 10;
if(c>='0' && c<='9') return c - '0';
return 1;
}
char GetOper(int n)
{
switch(n)
{
case 0:
return '+';
case 1:
return '-';
case 2:
return '';
case 3:
return '/';
} return ' ';
}double MyCalcu(double op1, double op2, int oper)
{
switch(oper)
{
case 0:
return op1 + op2;
case 1:
return op1 - op2;
case 2:
return op1 op2;
case 3:
if(fabs(op2)>00001)
return op1 / op2;
else
return 100000;
} return 0;
}
void MakeAnswer(char answer, int type, char question, int oper)
{
char p[4][3];
for(int i=0; i<4; i++)
{
if( question[i] == 'T' )
strcpy(p[i], "10");
else
sprintf(p[i], "%c", question[i]);
}
switch(type)
{
case 0:
sprintf(answer, "%s %c (%s %c (%s %c %s))",
p[0], GetOper(oper[0]), p[1], GetOper(oper[1]), p[2], GetOper(oper[2]), p[3]);
break;
case 1:
sprintf(answer, "%s %c ((%s %c %s) %c %s)",
p[0], GetOper(oper[0]), p[1], GetOper(oper[1]), p[2], GetOper(oper[2]), p[3]);
break;
case 2:
sprintf(answer, "(%s %c %s) %c (%s %c %s)",
p[0], GetOper(oper[0]), p[1], GetOper(oper[1]), p[2], GetOper(oper[2]), p[3]);
break;
case 3:
sprintf(answer, "((%s %c %s) %c %s) %c %s",
p[0], GetOper(oper[0]), p[1], GetOper(oper[1]), p[2], GetOper(oper[2]), p[3]);
break;
case 4:
sprintf(answer, "(%s %c (%s %c %s)) %c %s",
p[0], GetOper(oper[0]), p[1], GetOper(oper[1]), p[2], GetOper(oper[2]), p[3]);
break;
}
}
bool TestResolve(char question, int oper, char answer)
{
// 等待考生完成
int type[5]={0,1,2,3,4};//计算类型
double p[4];
double sum=0;
//
for(int i=0; i<4; i++) //循环取得点数
{
p[i]=GetCardValue(int(question[i]));
} for(i=0;i<5;i++)
{
MakeAnswer(answer,type[i],question,oper); //获取可能的答案
switch(type[i])
{
case 0:
sum=MyCalcu(p[0],MyCalcu( p[1],MyCalcu(p[2], p[3], oper[2]),oper[1]),oper[0]); //A(B(cD))
break;
case 1:
sum=MyCalcu(p[0],MyCalcu(MyCalcu(p[1], p[2], oper[1]),p[3],oper[2]),oper[0]); //A((BC)D)
break;
case 2:
sum=MyCalcu(MyCalcu(p[0], p[1], oper[0]),MyCalcu(p[2], p[3], oper[2]),oper[1]); // (AB)(CD)
break;
case 3:
sum=MyCalcu(MyCalcu(MyCalcu(p[0], p[1], oper[0]),p[2],oper[1]),p[3],oper[2]); //((AB)C)D
break;
case 4:
sum=MyCalcu(MyCalcu(p[0],MyCalcu(p[1], p[2], oper[1]),oper[0]),p[3],oper[2]); //(A(BC))D
break;
}
if(sum==24) return true;
}
return false;
}
/
采用随机试探法:就是通过随机数字产生 加减乘除的 组合,通过大量的测试来命中的解法
提示:
1 需要考虑用括号控制计算次序的问题 比如:( 10 - 4 ) ( 3 + A ), 实际上计算次序的数目是有限的:
A(B(cD))
A((BC)D)
(AB)(CD)
((AB)C)D
(A(BC))D
2 需要考虑计算结果为分数的情况:( 3 + (3 / 7) ) 7
3 题目中牌的位置可以任意交换
/
bool TryResolve(char question, char answer)
{
int oper[3]; // 存储运算符,0:加法 1:减法 2:乘法 3:除法
for(int i=0; i<1000 1000; i++)
{
// 打乱纸牌顺序
shuffle(question);
// 随机产生运算符
for(int j=0; j<3; j++)
oper[j] = rand() % 4; if( TestResolve(question, oper, answer) ) return true;
} return false;
}
int main(int argc, char argv[])
{
// 初始化随机种子
srand( (unsigned)time( NULL ) ); char buf1[4]; // 题目
char buf2[30]; // 解答
printf("\n");
printf("计算24\n");
printf("A J Q K 均按1计算,其它按牌点计算\n");
printf("目标是:通过四则运算组合出结果:24\n");
printf("\n\n");
for(;;)
{
GivePuzzle(buf1); // 出题
printf("题目:");
for(int j=0; j<4; j++){
if( buf1[j] == 'T' )
printf("10 ");
else
printf("%c ", buf1[j]);
} printf("\n按任意键参考答案\n");
getch(); if( TryResolve(buf1, buf2) ) // 解题
printf("参考:%s\n", buf2);
else
printf("可能是无解\n"); printf("按任意键出下一题目,x 键退出\n");
if( getch() == 'x' ) break;
} return 0;
}
//囧,代码写好回来一看居然已经有推荐答案了
#include <stdioh>
#include <iostream>
#include <stringh>
#include <stdlibh>
#include <windowsh>
#define MAX 80
char buff[MAX+1];
char first[4];
char last;
bool spellCheck()
{
int p = 0;
while(buff[p] != 0)
{
if(buff[p] > 'z'||buff[p] < 'a')
return false;
p++;
}
return true;
}
bool syntaxCheck()
{
int len = strlen(first);
if(len == 3)
{
if(strncmp(first,buff,3) == 0)
return true;
else if(strncmp(&first[1],buff,2) == 0)
return true;
else if(strncmp(&first[2],buff,1) == 0)
return true;
}
else if(len == 2)
{
if(strncmp(&first[0],buff,2) == 0)
return true;
else if(strncmp(&first[1],buff,1) == 0)
return true;
}
else if(len == 1)
{
if(strncmp(&first[0],buff,1) == 0)
return true;
}
return false;
}
void getWord()
{
do
{
printf("请输入一个全小写的单词,和%s匹配\n",first);
scanf("%s",buff);
if(!spellCheck())
{
printf("拼写错误,请输入一个全小写的单词\n");
continue;
}
if(strlen(buff) == 0)
{
printf("请输入一个单词\n");
continue;
}
return;
}while(true);
}
void start()
{
FILE fp = fopen("D:\\1txt","w");//<--------这里改输出文件的路径
int len;
first[0] = rand()%26+'a';
first[1] = 0;
last = rand()%26+'a';
printf("a1:%c a2:%c\n",first[0],last);
while(true)
{
getWord();
if(!syntaxCheck())
{
printf("输入的单词不符合要求,请重新输入\n");
continue;
}
else
{
fprintf(fp,"%s\n",buff);
len = strlen(buff);
if(buff[len-1] == last)
{
printf("%s末尾和a2:%c匹配,所以游戏结束\n",buff,last);
break;
}
else
{
if(len >= 3)
strcpy(first,&buff[len-3]);
else
strcpy(first,buff);
printf("匹配成功,请继续输入\n");
}
}
}
fclose(fp);
}
int main()
{
srand(GetTickCount());
start();
system("pause");
}
打字游戏
#include<stdioh>
#include<timeh>
char kw[]={"Q W E R T Y U I O P [ ]","A S D F G H J K L ; '","Z X C V B N M , / "};
long AllCounter=0,RightCounter=0,WrongCounter=0;
main()
{
int i,j;
int fun_Esc();
clrscr();
gotoxy(18,1);
printf("%s\n",kw[0]);
gotoxy(20,3);
printf("%s\n",kw[1]);
gotoxy(22,5);
printf("%s\n",kw[2]);
gotoxy(11,25);
for(i=0;i<60;i++)
{
printf("=");
}
gotoxy(1,1);
printf("AllCh: %ld\nRight: %ld\nWrong: %ld",AllCounter,RightCounter,WrongCounter);
gotoxy(50,1);
printf("Press Esc to exit");
gotoxy(50,2);
printf("Enter to pause");
gotoxy(26,12);
printf(" ");
gotoxy(26,13);
printf(" Press any key to start! ");
gotoxy(26,14);
printf(" ");
gotoxy(51,13);
if(getch()==27)
{
if(fun_Esc()==1)
{
clrscr();
exit(0);
}
}
gotoxy(23,12);
printf(" ");
gotoxy(23,13);
printf(" ");
gotoxy(23,14);
printf(" ");
while(1)
fun_Play();
}
int fun_Play()
{
int x,y,i,j;
unsigned int Timer;
char ch;
char cur;
time_t t;
srand((unsigned)time(&t));
gotoxy(26,12);
printf(" ");
gotoxy(26,13);
printf(" ");
gotoxy(26,14);
printf(" ");
y = 6;
Timer = 100000;
i = rand()%3;
j = rand()%(9-i);
ch = kw[i][j4];
x = 18+i2+j4;
while(y<=24)
{
if(kbhit())
{
cur = getch();
if(cur==ch || cur==ch+32)
{
ch = ''; Timer = 1000;
}
else if(cur==27)
{
if(fun_Esc()==1)
{
clrscr();
exit(0);
}
}
else if(cur=='\r')
{
gotoxy(x,y-1);
printf(" ");
gotoxy(26,12);
printf(" ");
gotoxy(26,13);
printf(" Press any key to continue ");
gotoxy(26,14);
printf(" ");
getch();
gotoxy(28,13);
printf(" ");
}
else
{
WrongCounter++;
}
}
if(y>6)
{
gotoxy(x,y-1);
printf(" ");
}
gotoxy(x,y);
printf("%c",ch);
gotoxy(1,1);
printf("AllCh: %ld\nRight: %ld\nWrong: %ld",AllCounter,RightCounter,WrongCounter);
delay(Timer);
y++;
}
AllCounter++;
if(ch == '')
{
RightCounter++;
}
}
int fun_Esc()
{
int key = '#';
gotoxy(26,12);
printf(" ");
gotoxy(26,13);
printf(" Are you sure to exit (Y/N) ");
gotoxy(26,14);
printf(" ");
gotoxy(51,13);
while(key!='Y' && key!='y' && key!='N' && key!='n')
{
key = getch();
if(key=='Y' || key=='y')
{
return 1;
}
if(key=='N' || key=='n')
{
gotoxy(24,12);
printf(" ");
gotoxy(24,13);
printf(" ");
gotoxy(24,14);
printf(" ");
return 0;
}
}
}
以上就是关于给我提供个小游戏的C 语言代码全部的内容,包括:给我提供个小游戏的C 语言代码、C语言可以写哪些小游戏、关于用C语言编写的小游戏的游戏代码,如黑白棋贪吃蛇等等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)