可以c的游戏h系列游戏
Ⅰ 老师要求做c语言的游戏(类似贪吃蛇),我用的是vc++,graphics.h一直有问题,所以决定用opengl。
openGL绘图不知道,你可以把问题简单化,只要搞懂在任意像素点能画一个点,
写一个类似paint(int x, int y, int colour)函数,问题就都解决了。
画矩形无非就是两层for循环,调用画点的函数一个点一个点,画上去,里面for循环画一横行,然后外面for循环把坐标移到下一行。
擦除一个矩形,就是在那个矩形上重画一下背景色。
蛇移动,更简单,擦掉蛇尾矩形,在蛇前进方向上画一个矩形。两个步骤,视觉上就是蛇在移动。
定义一个游戏区域大小的二维数组, 利用数组的下标保存蛇的坐标点、边框坐标、和要吃的那个东西坐标。
每画一个蛇头,判断一下所在坐标,做相应处理,就OK了。
Ⅱ c语言游戏整合
啊
;‘’‘’‘???????????????
Ⅲ c语言可以编什么样的游戏
给个c语言编的赛车游戏给你
#include "graphics.h"
#include "conio.h"
#include "stdio.h"
enum shu {lu, kongdi, qiche, qita};
enum setvalue {veryeasy, easy, normal, hard, veryhard};
enum setvalue set_su=veryeasy,set_nan=veryeasy;
main()
{int gdriver, gmode;
void hua_lu(); void hua_che(); void sheng_lu(); void chushi_lu();
void hua_biankuang(); int ceshi_key(); void chongxin_bisai();
void chuli_che(); int ceshi_chugui();
enum shu matrix[128][96];
int chezhong[2]={64,86};
char keyvalue='a';
int kyh,shenming=100;
long i=0;
/*提示信息*/
kkkk:
printf("\n\n\t\t\tNAME: MiniCar\n\t\t\tVERSION: 1.4\n\t\t\tCREATOR: kanker\n\n");
printf("NARRATE: This function is a race game, be use 'j,k,l' and 'i' to control the car. press 'e' means exiting the game, press 'r' means restart the race\n");
printf("\nTHE GAME SET: Please input the value of speed and dificulty (0-4),");
printf("for example input '0,0' means speed=0 and dificulty=0,and so on.\n");
printf("\n\n\tGOOD LUCKY!\n\n\tplease input===>");
scanf("%d,%d",&set_su,&set_nan);
if (set_su<5 &&set_nan<5)
{ printf ("\nGOOD! SET OK!\n please waiting...");sleep(1.5);}
else
{ printf("\n\nINPUT ERROR,REINPUT\n"); goto kkkk; }
gdriver =9; gmode =2;
initgraph(&gdriver,&gmode,"d:\\turboc2");
chushi_lu(matrix,set_nan); /*初始化道路*/
for (;kyh!=10;i++)
{ hua_biankuang();
sheng_lu(matrix,set_su);
hua_lu(matrix);
hua_che(chezhong);
if ( kbhit()==0 ) { keyvalue='c'; }
else { keyvalue=getche();}
kyh=ceshi_key(keyvalue); /*处理键盘输入*/
if (kyh==6) { nosound(); goto kkkk;shenming=100;i=0;}
chuli_che(chezhong,kyh);
shenming=shenming-ceshi_chugui(chezhong,matrix);
sleep(0.75); if(i>10) { sound(50+((int)(i/5))%100); } /*赛车声音*/
if (shenming<1)
{setcolor(0); outtextxy(280,25,"GAME START");
setcolor(15); outtextxy(280,175,"GAME OVER"); kyh=10;
}
}
nosound();
getch();
closegraph();
printf("\n\n Your score is:%ld\n\nTHANKS,BYEBYE!",i*(set_nan+set_su+1));
sleep(5);
return 0;
}
void chushi_lu(enum shu aa[128][96],enum set nan)
{int i,j;
for (i=20;i<=108;i++)
{ for (j=10;j<=86;j++)
{ if (i<80-nan && i>50+nan) { aa[i][j]=lu; }
else aa[i][j]=qita;
}
}
}
void sheng_lu(enum shu aa[128][96],enum set su)
{int i=0,j=0,k,kang;
kang=(int) rand() % 10;
for (i=20;i<=108;i++)
{ for (j=86;j>10+su;j--)
{aa[i][j]=aa[i][j-1-su];
}
}
if (kang<5 && aa[20][10]==qita)
{for (k=0;k<=su;k++)
{ for (i=20;i<108;i++)
{ aa[i][10+k]=aa[i+1][10+k]; }
aa[108][10+k]=qita;
}
}
if (kang>=5 && aa[108][10]==qita)
{for (k=0;k<=su;k++)
{ for (i=108;i>20;i--)
{ aa[i][10+k]=aa[i-1][10+k]; }
aa[20][10+k]=qita;
}
}
}
void hua_lu(enum shu aa[128][96])
{int i,j;
for (i=20;i<=108;i++)
{ for (j=10;j<=86;j++)
{ if (aa[i][j] != lu)
{ putpixel(i*5,j*5,7); }
else
{ putpixel(i*5,j*5,0); }
}
}
}
void hua_che(int zhongxin[2]) /* the car's profile */
{int i,j,x,y;
x=zhongxin[0]; y=zhongxin[1];
for (i=0;i<5;i++)
{ for (j=0;j<8;j++)
{
{ if (i!=0 && i!=4) putpixel ((x-4+i*2)*5,(y-j*2)*5,7);
else
{if (j!=7 && j!=3 && j!=4)
putpixel ((x-4+i*2)*5,(y-j*2)*5,7);
}
}
}
}
}
void hua_biankuang ()
{enum shu bb[128][96];
setcolor(15);
rectangle(10,10,630,470);
rectangle(20*5,10*5,108*5,86*5);
outtextxy(280,25,"GAME START");
outtextxy(30,100,"SPEED:");
if (set_su+set_nan<2) outtextxy(35,120,"VERYEASY");
if (set_su+set_nan<4) outtextxy(35,120,"EASY");
if (set_su+set_nan<6) outtextxy(35,120,"NORMAL");
if (set_su+set_nan<8) outtextxy(35,120,"HARD");
if (set_su+set_nan>=8) outtextxy(35,120,"VERYHARD");
/*can add some other text and line*/
}
int ceshi_key(char a)
{ int i=0;
if (a=='j') i=1;
if (a=='k') i=2;
if (a=='l') i=3;
if (a=='i') i=4;
if (a=='r') i=6;
if (a=='e') i=10;
return i;
}
void chongxin_bisai()
{
}
void chuli_che(int zhongxin[2],int k)
{if (k==0 && zhongxin[1]<=84) zhongxin[1]=zhongxin[1];
if (k==1 && zhongxin[0]>=26) zhongxin[0]=zhongxin[0]-2;
if (k==3 && zhongxin[0]<=102) zhongxin[0]=zhongxin[0]+2;
if (k==2 && zhongxin[1]<=84) zhongxin[1]=zhongxin[1]+2;
if (k==4 && zhongxin[1]>=18) zhongxin[1]=zhongxin[1]-2;
if (k==6) chongxin_bisai();
}
int ceshi_chugui(int zhongxin[2],enum shu aa[128][96])
{int i,j,ming=0;
for (i=0;i<5;i++)
{for (j=0;j<8;j++)
{if (aa[zhongxin[0]-4+2*i][zhongxin[1]-j*2]!=lu) ming++;
}
}
return ming;
}
Ⅳ 能不能介绍点C语言编程的小游戏,好玩点的。要有代码,谢谢了。
#include<stdio.h>
#include<conio.h>
#include<time.h>
#include"consoleout.h"
#pragma comment(lib,"consoleout.lib")
void main();
//板的当前位置
int g_nBarX = 4;
int g_nBarY = 24;
//球的当前位置
int g_nBallX = g_nBarX + 4;
int g_nBallY = g_nBarY - 2;
//速度(g_nBallVx,g_nBallVy)
int g_nBallVx = 1;
int g_nBallVy = -1;
int a,b,n;
static int nOldX = g_nBallX = 4;
static int nOldY = g_nBallY = 20;
//功能:移动溜板
void BarMove(char cC)
{
static int nOldX = g_nBarX;
static int nOldY = g_nBarY;
if(cC == 'a'||cC == 'A')
{
g_nBarX = nOldX - 8;
}
else if(cC == 'd'||cC == 'D')
{
g_nBarX= nOldX + 8;
}
//防止出右边界
if(g_nBarX > 58)
{
g_nBarX = 58;
}
//防止出左边界
if(g_nBarX < 2)
{
g_nBarX = 2;
}
CreateSmWindow("",nOldX,nOldY,10,3,0,0);
CreateSmWindow("",g_nBarX,g_nBarY,10,3,12,0);
nOldX = g_nBarX;
}
//功能:绘制小球的弹动
void BallMove()
{
if(g_nBallX == 2||g_nBallX == 76)
{
g_nBallVx = -g_nBallVx;
}
if(g_nBallY == 1||g_nBallY== 26)
{
g_nBallVy = -g_nBallVy;
}
g_nBallX = nOldX + g_nBallVx;
g_nBallY = nOldY + g_nBallVy;
MoveCursorTo(nOldX,nOldY);
printf(" ");
MoveCursorTo(g_nBallX,g_nBallY);
printf("●");
nOldX = g_nBallX;
nOldY = g_nBallY;
MoveCursorTo(0,29);
printf("球:位置:(%d,%d)",g_nBallX,g_nBallY);
sleep(b);
switch(a)
{
case 1: b = 70;break;
case 2: b = 40;break;
case 3: b = 5;break;
}
}
//功能:判断球与板的位置,如果碰到就反弹球
//返回值:改变运行方向
void Pop()
{
//判断小球落在板上
if(g_nBarX < g_nBallX && g_nBallX < g_nBarX + 24 && g_nBallY > g_nBarY - 2)
{
g_nBallVy = -g_nBallVy;
}
}
void MainLoop()
{
while(1)
{
if(_kbhit() == 1)
{
char c = _getch();
if(c == 27)
{
printf("Game Over!\n");
break;
}
BarMove(c);
}
BallMove();
Pop();
sleep(5);
if(g_nBallY > 24)
{
CreateSmWindow("弹球游戏\n",0,0,40,28,11,0);
MoveCursorTo(35,12);
printf("游戏结束!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
sleep(1000);
break;
}
}
CreateSmWindow("弹球游戏\n",0,0,40,28,10,0);
MoveCursorTo(35,14);
printf("1.重新开始");
MoveCursorTo(35,16);
SetTextColor(11,0);
printf("2.退出");
MoveCursorTo(25,12);
SetTextColor(10,0);
printf("请选择(选择完毕按回车键确认):");
MoveCursorTo(54,12);
scanf("%d",&n);
if(n == 1)
{
g_nBarX = 4;
g_nBarY = 24;
g_nBallX = g_nBarX + 4;
g_nBallY = g_nBarY - 2;
g_nBallVx = 1;
g_nBallVy = -1;
nOldX = g_nBallX = 4;
nOldY = g_nBallY = 20;
CreateSmWindow("弹球游戏\n",0,0,40,28,10,0);
MoveCursorTo(22,8);
SetTextColor(11,0);
printf("(提示:请把游戏窗口调整到最大化)");
MoveCursorTo(25,10);
printf("(控制键介绍:左 A ; 右 D)");
MoveCursorTo(32,14);
SetTextColor(10,0);
printf("1.简单");
MoveCursorTo(32,16);
printf("2.中等");
MoveCursorTo(32,18);
printf("3.困难");
MoveCursorTo(18,12);
printf("请选择游戏难度(选择完毕按回车键开始游戏):\n");
MoveCursorTo(59,12);
scanf("%d",&a);
CreateSmWindow("弹球游戏\n",0,0,40,28,13,0);
MoveCursorTo(32,12);
SetTextColor(9,0);
printf("★游戏开始★");
sleep(1200);
CreateSmWindow("弹球游戏",0,0,40,28,13,0);
MainLoop();
}
else if(n == 2)
{
CreateSmWindow("弹球游戏\n",0,0,40,28,10,0);
MoveCursorTo(32,12);
SetTextColor(11,0);
printf("请按任意键退出\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
}
}
void main()
{
CreateSmWindow("弹球游戏\n",0,0,40,28,10,0);
MoveCursorTo(22,8);
SetTextColor(11,0);
printf("(提示:请把游戏窗口调整到最大化)");
MoveCursorTo(25,10);
printf("(控制键介绍:左 A ; 右 D)");
MoveCursorTo(32,14);
SetTextColor(10,0);
printf("1.简单");
MoveCursorTo(32,16);
printf("2.中等");
MoveCursorTo(32,18);
printf("3.困难");
MoveCursorTo(18,12);
printf("请选择游戏难度(选择完毕按回车键开始游戏):\n");
MoveCursorTo(59,12);
scanf("%d",&a);
CreateSmWindow("弹球游戏\n",0,0,40,28,13,0);
MoveCursorTo(32,12);
SetTextColor(9,0);
printf("★游戏开始★");
sleep(1200);
CreateSmWindow("弹球游戏",0,0,40,28,13,0);
MainLoop();
}
我刚做我完的弹球游戏,但是不是很好玩1你看一下```呵呵
Ⅳ 有没有又可以H又有很好剧情的游戏
恩。。我觉得夜明前的琉璃色蛮不错的,我最喜欢的**GAL,战国兰斯也还行,就是有点鬼畜
Ⅵ 求几个完全可以运行的C语言小游戏
代码这里粘不出来
Ⅶ 求几款18X乙女向游戏(汉化版)。
金色のコルダ 金色的琴弦
2.月ノ光 太阳ノ影 (月之光 太阳之影)
3.月之光太阳之影 续作another moon
4.银の冠 碧の涙/银之冠 碧之泪
5.薄樱鬼/薄桜鬼同人游戏:谁ガ为に鬼は啼く日文版
6.薄樱鬼/薄桜鬼同人游戏:贵方は私の旦那さま 中文版
你也可以下载一个快玩,里面好多类似的游戏。
Ⅷ C语言可以写哪些小游戏
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();
Fd.x=random(440);
Fd.x=Fd.x-Fd.x%20+30;
Fd.y=random(440);
Fd.y=Fd.y-Fd.y%20+30;
Fd.color=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();
Fd.x=random(440);
Fd.x=Fd.x-Fd.x%20+30;
Fd.y=random(440);
Fd.y=Fd.y-Fd.y%20+30;
Fd.color=random(14)+1;
flag5=0;
}
Dsnkorfd(Fd.x,Fd.y,Fd.color);
}
void Snake_Bodyadd()
{if(Snk[0].x==Fd.x&&Snk[0].y==Fd.y)
{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=Fd.color;
}
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=Fd.color;
}
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=Fd.color;
}
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=Fd.color;
}
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 <stdio.h>
#include <conio.h>
#include <time.h>
#include <windows.h>
#define ZL 4 //坐标增量, 不使游戏窗口靠边
#define W 36 //游戏窗口的宽度
#define H 20 //游戏窗口的高度
int i,j,Ta,Tb,Tc; // Ta,Tb,Tc用于记住和转换方块变量的值
int a[60][60]={0}; //标记游戏屏幕各坐标点:0,1,2分别为空、方块、边框
int b[4]; //标记4个"口"方块:1有,0无,类似开关
int x,y, level,score,speed; //方块中心位置的x,y坐标,游戏等级、得分和游戏速度
int flag,next; //当前要操作的方块类型序号,下一个方块类型序号
void gtxy(int m, int n); //以下声明要用到的自编函数
void setColor(unsigned short p, unsigned short q); //设定显示颜色
void gflag( ); //获得下一方块类型的序号
void csh( ); //初始化界面
void start( ); //开始部分
void prfk ( ); //打印方块
void clfk( ); //清除方块
void mkfk( ); //制作方块
void keyD( ); //按键操作
int ifmov( ); //判断能否移动
void clHA( ); //清除满行的方块
void clNEXT( ); //清除边框外的NEXT方块
int main( )
{ csh( );
while(1)
{ start( );
while(1)
{ setColor(5, 0);
prfk( ); Sleep(speed); clfk( );
Tb=x;Tc=flag; //临存当前x坐标和序号,以备撤销操作
keyD( );
y++; //方块向下移动
if (ifmov( )==0) { y--; setColor(2, 0);prfk( ); clHA( ); break;} //不可动时的操作
}
for(i=y-2;i<y+2;i++){ if (i==ZL) { j=0; } } //方块触到框顶
if (j==0) { system("cls");gtxy(10,10); setColor(6, 0);
printf("游戏结束!"); getch(); break; }
clNEXT( );
}
return 0;
}
void gtxy(int m, int n) //控制光标移动
{COORD pos; //定义变量
pos.X = m; //横坐标
pos.Y = n; //纵坐标
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); //获得显示器句柄
}
void setColor(unsigned short ForeColor = 7, unsigned short BackGroundColor = 0)
{ HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(handle, ForeColor + BackGroundColor * 0x10);
}
void csh( ) //初始化界面
{gtxy(ZL+W/2-5,ZL-2); setColor(10, 0); printf("俄罗斯方块"); //打印游戏名称
gtxy(ZL+W+3,ZL+7); setColor(5, 0);printf("******* NEXT:"); //打印菜单信息
gtxy(ZL+W+3,ZL+13); setColor(5, 0);printf("************");
gtxy(ZL+W+3,ZL+15); setColor(9, 0);printf("Esc :退出游戏");
gtxy(ZL+W+3,ZL+17); setColor(9, 0);printf("↑键:变体");
gtxy(ZL+W+3,ZL+19); setColor(9, 0);printf("空格:暂停游戏");
gtxy(ZL,ZL); setColor(2, 0); printf("╔"); gtxy(ZL+W-2,ZL); printf("╗"); //打印框角
gtxy(ZL,ZL+H); printf("╚"); gtxy(ZL+W-2,ZL+H); printf("╝");
a[ZL][ZL+H]=2; a[ZL+W-2][ZL+H]=2; //记住有图案
for(i=2;i<W-2;i+=2) {gtxy(ZL+i,ZL); printf("═"); } //打印上横框
for(i=2;i<W-2;i+=2) {gtxy(ZL+i,ZL+H); printf("═"); a[ZL+i][ZL+H]=2; } //打印下横框有图案
for(i=1;i<H;i++) { gtxy(ZL,ZL+i); printf("║"); a[ZL][ZL+i]=2; } //打印左竖框记住有图案
for(i=1;i<H;i++) {gtxy(ZL+W-2,ZL+i); printf("║"); a[ZL+W-2][ZL+i]=2; } //打印右竖框有图案
CONSOLE_CURSOR_INFO cursor_info={1,0}; //以下是隐藏光标的设置
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
level=1; score=0; speed=400;
gflag( ); flag=next; //获得一个当前方块序号
}
void gflag( ) //获得下一个方块类型的序号
{ srand((unsigned)time(NULL)); next = rand()%19+1; }
void start( ) //开始部分
{ gflag( ); Ta=flag; flag=next; //保存当前方块序号,将下一方块序号临时操作
x=ZL+W+6; y=ZL+10; setColor(5, 0); prfk( ); //给x,y赋值,在框外打印出下一方块
flag=Ta; x=ZL+W/2; y=ZL-1; //取回当前方块序号,并给x,y赋值
}
void prfk ( ) //打印俄罗斯方块
{ for(i=0;i<4;i++) {b[i]=1; } //数组b[4]每个元素的值都为1
mkfk ( ); //制作俄罗斯方块
for( i= x-2; i<=x+4; i+=2 ) //打印方块
{ for(j=y-2;j<= y+1;j++) { if( a[i][j]==1 && j>ZL ){ gtxy(i,j); printf("□"); } } }
gtxy(ZL+W+3,ZL+1); setColor(9, 0); printf("level : %d",level); //以下打印菜单信息
gtxy(ZL+W+3,ZL+3); setColor(9, 0); printf("score : %d",score);
gtxy(ZL+W+3,ZL+5); setColor(9, 0); printf("speed : %d",speed);
}
void clfk( ) //清除俄罗斯方块
{ for(i=0;i<4;i++) { b[i]=0; } //数组b[4]每个元素的值都为0
mkfk ( ); //制作俄罗斯方块
for( i=x-2; i<=x+4; i+=2 ) //清除方块
{ for(j=y-2;j<=y+1;j++){ if( a[i][j]==0 && j>ZL ){ gtxy(i,j); printf(" "); } } }
}
void mkfk( ) //制作俄罗斯方块
{ a[x][ y]=b[0]; //方块中心位置状态: 1-有,0-无
switch(flag) //共6大类,19种小类型
{ case 1: { a[x][y-1]=b[1]; a[x+2][y-1]=b[2]; a[x+2][y]=b[3]; break; } //田字方块
case 2: { a[x-2][y]=b[1]; a[x+2][y]=b[2]; a[x+4][y]=b[3]; break; } //直线方块:----
case 3: { a[x][y-1]=b[1]; a[x][y-2]=b[2]; a[x][y+1]=b[3]; break; } //直线方块: |
case 4: { a[x-2][y]=b[1]; a[x+2][y]=b[2]; a[x][y+1]=b[3]; break; } //T字方块
case 5: { a[x][y-1]=b[1]; a[x][y+1]=b[2]; a[x-2][y]=b[3]; break; } //T字顺时针转90度
case 6: { a[x][y-1]=b[1]; a[x-2][y]=b[2]; a[x+2][y]=b[3]; break; } //T字顺转180度
case 7: { a[x][y-1]=b[1]; a[x][y+1]=b[2]; a[x+2][y]=b[3]; break; } //T字顺转270度
case 8: { a[x][y+1]=b[1]; a[x-2][y]=b[2]; a[x+2][y+1]=b[3]; break; } //Z字方块
case 9: { a[x][y-1]=b[1]; a[x-2][y]=b[2]; a[x-2][y+1]=b[3]; break; } //Z字顺转90度
case 10: { a[x][y-1]=b[1]; a[x-2][y-1]=b[2]; a[x+2][y]=b[3]; break; } //Z字顺转180度
case 11: { a[x][y+1]=b[1]; a[x+2][y-1]=b[2]; a[x+2][ y]=b[3]; break; } //Z字顺转270度
case 12: { a[x][y-1]=b[1]; a[x][y+1]=b[2]; a[x-2][y-1]=b[3]; break; } //7字方块
case 13: {a[x-2][y]=b[1]; a[x+2][y-1]=b[2]; a[x+2][y]=b[3]; break; } //7字顺转90度
case 14: { a[x][y-1]=b[1]; a[x][y+1]=b[2]; a[x+2][y+1]=b[3]; break; } //7字顺转180度
case 15: { a[x-2][y]=b[1]; a[x-2][y+1]=b[2]; a[x+2][y]=b[3]; break; } //7字顺转270度
case 16: { a[x][y+1]=b[1]; a[x][y-1]=b[2]; a[x+2][y-1]=b[3]; break; } //倒7字方块
case 17: { a[x-2][y]=b[1]; a[x+2][y+1]=b[2]; a[x+2][y]=b[3]; break; } //倒7字顺转90度
case 18: { a[x][y-1]=b[1]; a[x][y+1]=b[2]; a[x-2][y+1]=b[3]; break; } //倒7字顺转180度
case 19: { a[x-2][y]=b[1]; a[x-2][y-1]=b[2]; a[x+2][y]=b[3]; break; } //倒7字顺转270度
}
}
void keyD( ) //按键操作
{ if (kbhit( ))
{ int key;
key=getch();
if (key==224)
{ key=getch();
if (key==75) { x-=2; } //按下左方向键,中心横坐标减2
if (key==77) { x+=2; } //按下右方向键,中心横坐标加2
if (key==72) //按下向上方向键,方块变体
{ if (flag>=2 && flag<=3 ) { flag++; flag%=2; flag+=2; }
if ( flag>=4 && flag<=7 ) { flag++; flag%=4; flag+=4; }
if (flag>=8 && flag<=11 ) { flag++; flag%=4; flag+=8; }
if (flag>=12 && flag<=15 ) { flag++; flag%=4; flag+=12; }
if ( flag>=16 && flag<=19 ) { flag++; flag%=4; flag+=16; } }
}
if (key==32) //按空格键,暂停
{ setColor(5, 0);prfk( ); while(1) { if (getch( )==32) { clfk( );break;} } } //再按空格键,继续游戏
if (ifmov( )==0) { x=Tb; flag=Tc; } //如果不可动,撤销上面操作
else { setColor(5, 0); prfk( ); Sleep(speed); clfk( ); Tb=x;Tc=flag;} //如果可动,执行操作
}
}
int ifmov( ) //判断能否移动
{ if (a[x][y]!=0) { return 0; } //方块中心处有图案返回0,不可移动
else{ if ( (flag==1 && ( a[x][ y-1]==0 && a[x+2][y-1]==0 && a[x+2][y]==0 ) ) || //田字方块
(flag==2 && ( a[x-2][y]==0 && a[x+2][y]==0 && a[x+4][y]==0 ) ) || //以下为其它方块
(flag==3 && ( a[x][y-1]==0 && a[x][y-2]==0 && a[x][y+1]==0 ) ) ||
(flag==4 && ( a[x-2][y]==0 && a[x+2][y]==0 && a[x][y+1]==0 ) ) ||
(flag==5 && ( a[x][y-1]==0 && a[x][y+1]==0 && a[x-2][y]==0 ) ) ||
(flag==6 && ( a[x][ y-1]==0 && a[x-2][y]==0 && a[x+2][y]==0 ) ) ||
(flag==7 && ( a[x][y-1]==0 && a[x][y+1]==0 && a[x+2][y]==0 ) ) ||
(flag==8 && ( a[x][y+1]==0 && a[x-2][y]==0 && a[x+2][y+1]==0 ) ) ||
(flag==9 && ( a[x][y-1]==0 && a[x-2][y]==0 && a[x-2][y+1]==0 ) ) ||
(flag==10 && ( a[x][y-1]==0 && a[x-2][y-1]==0 && a[x+2][y]==0 ) ) ||
(flag==11 && ( a[x][y+1]==0 && a[x+2][y-1]==0 && a[x+2][y]==0 ) ) ||
(flag==12 && ( a[x][y-1]==0 && a[x][y+1]==0 && a[x-2][y-1]==0 ) ) ||
( flag==13 && ( a[x-2][y]==0 && a[x+2][y-1]==0 && a[x+2][y]==0 ) ) ||
( flag==14 && ( a[x][y-1]==0 && a[x][y+1]==0 && a[x+2][y+1]==0 ) ) ||
(flag==15 && ( a[x-2][y]==0 && a[x-2][y+1]==0 && a[x+2][y]==0 ) ) ||
(flag==16 && ( a[x][y+1]==0 && a[x][y-1]==0 && a[x+2][y-1]==0 ) ) ||
( flag==17 && ( a[x-2][y]==0 && a[x+2][y+1]==0 && a[x+2][y]==0 ) ) ||
(flag==18 && ( a[x][y-1]==0 &&a[x][y+1]==0 && a[x-2][y+1]==0 ) ) ||
(flag==19 && ( a[x-2][y]==0 && a[x-2][y-1]==0 && a[x+2][y]==0 ) ) ) { return 1; }
}
return 0; //其它情况返回0
}
void clNEXT( ) //清除边框外的NEXT方块
{ flag = next; x=ZL+W+6; y=ZL+10; clfk( ); }
void clHA( ) //清除满行的方块
{ int k, Hang=0; //k是某行方块个数, Hang是删除的方块行数
for(j=ZL+H-1;j>=ZL+1;j--) //当某行有W/2-2个方块时,则为满行
{ k=0; for(i=ZL+2;i<ZL+W-2;i+=2)
{ if (a[i][j]==1) //竖坐标从下往上,横坐标由左至右依次判断是否满行
{ k++; //下面将操作删除行
if (k==W/2-2) { for(k=ZL+2;k<ZL+W-2;k+=2) { a[k][j]=0; gtxy(k,j); printf(" "); Sleep(1); }
for(k=j-1;k>ZL;k--)
{ for(i=ZL+2;i<ZL+W-2;i+=2) //已删行数的上面有方块,先清除再全部下移一行
{ if(a[i][k]==1) { a[i][k]=0; gtxy(i,k); printf(" ");a[i][k+1]=1; gtxy(i,k+1);
setColor(2, 0); printf("□"); } }
}
j++; //方块下移后,重新判断删除行是否满行
Hang++; //记录删除方块的行数
}
}
}
}
score+=100*Hang; //每删除一行,得100分
if ( Hang>0 && (score%500==0 || score/500> level-1 ) ) //满500分速度加快,升一级
{ speed-=20; level++; if(speed<200)speed+=20;}
}
Ⅹ 求各种C语言编程小游戏,越多越好,多了会有加分
C语言数字记忆小游戏,望采纳
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<time.h>
#defineTURE1
#defineFALSE0
voidmain()
{
charanother_name='Y';
charanother_game='Y';
intcorrect='TRUE';
intcounter=0;
intsequence_length=0;
inti=0;
longintseed=0;
intnumber=0;
longintnow=0;
longtime_taken=0;
intclock_per_sec;
printf(" ---------------------------------记忆小游戏-------------------------------------------- ");
printf("请牢记屏幕上出现的没一个数字,并在规定时间内输入您记下的数字。 ");
printf("回车开始游戏。 ");
scanf("%c",&another_game);
do
{
correct='TRUE';
counter=0;
sequence_length=2;
time_taken=clock();
while(correct)
{
sequence_length+=(counter++%3==0);
seed=time(NULL);
now=clock();
srand((int)seed);
for(i=0;i<=sequence_length;i++)
printf("%d",rand()%10);
for(;clock()-now<clock_per_sec;);
printf(" ");
for(i=0;i<=sequence_length;i++)
printf("");
if(counter==1)
printf(" 输入您记住的数字,以空格隔开。 ");
else
printf(" ");
srand((int)seed);
for(i=0;i<=sequence_length;i++)
{
scanf("%d",&number);
if(number!=rand()%10)
{
correct=FALSE;
break;
}
}
printf("%s ",correct?"正确!":"错误!");
}
time_taken=(clock()-time_taken)/clock_per_sec;
printf(" 您的成绩是:%d",--counter*100/time_taken);
fflush(stdin);
printf(" 是否继续游戏?(Y/N)? ");
scanf("%c",&another_game);
}
while(another_game=='y'||another_game=='Y');
}