小游戏代码C语言

#include

#include

#include

#include

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(hang100){printf("行数太多\n");t=1;}

if(lie100){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=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=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) 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) 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语言编程

#include

#include

#include /////////////////////////////////////////////

// 定义常量、枚举量、结构体、全局变量

/////////////////////////////////////////////#define WIDTH 10 // 游戏区宽度

#define HEIGHT 22 // 游戏区高度

#define SIZE 20 // 每个游戏区单位的实际像素// 定义操作类型

enum CMD

{CMD_ROTATE, // 方块旋转CMD_LEFT, CMD_RIGHT, CMD_DOWN, // 方块左、右、下移动CMD_SINK, // 方块沉底CMD_QUIT // 退出游戏

};// 定义绘制方块的方法

enum DRAW

{SHOW, // 显示方块HIDE, // 隐藏方块FIX // 固定方块

};// 定义七种俄罗斯方块

struct BLOCK

{WORD dir[4]; // 方块的四个旋转状态COLORREF color; // 方块的颜色

} g_Blocks[7] = { {0x0F00, 0x4444, 0x0F00, 0x4444, RED}, // I{0x0660, 0x0660, 0x0660, 0x0660, BLUE}, // 口{0x4460, 0x02E0, 0x0622, 0x0740, MAGENTA}, // L{0x2260, 0x0E20, 0x0644, 0x0470, YELLOW}, // 反L{0x0C60, 0x2640, 0x0C60, 0x2640, CYAN}, // Z{0x0360, 0x4620, 0x0360, 0x4620, GREEN}, // 反Z{0x4E00, 0x4C40, 0x0E40, 0x4640, BROWN}}; // T// 定义当前方块、下一个方块的信息

struct BLOCKINFO

{byte id; // 方块 IDchar x, y; // 方块在游戏区中的坐标byte dir:2; // 方向

} g_CurBlock, g_NextBlock;// 定义游戏区

BYTE g_World[WIDTH][HEIGHT] = {0};/////////////////////////////////////////////

// 函数声明

/////////////////////////////////////////////void Init(); // 初始化游戏

void Quit(); // 退出游戏

void NewGame(); // 开始新游戏

void GameOver(); // 结束游戏

CMD GetCmd(); // 获取控制命令

void DispatchCmd(CMD _cmd); // 分发控制命令

void NewBlock(); // 生成新的方块

bool CheckBlock(BLOCKINFO _block); // 检测指定方块是否可以放下

void DrawBlock(BLOCKINFO _block, DRAW _draw = SHOW); // 画方块

void OnRotate(); // 旋转方块

void OnLeft(); // 左移方块

void OnRight(); // 右移方块

void OnDown(); // 下移方块

void OnSink(); // 沉底方块/////////////////////////////////////////////

// 函数定义

/////////////////////////////////////////////// 主函数

void main()

{Init();CMD c;while(true){c = GetCmd();DispatchCmd(c);// 按退出时,显示对话框咨询用户是否退出if (c == CMD_QUIT){HWND wnd = GetHWnd();if (MessageBox(wnd, _T("您要退出游戏吗?"), _T("提醒"), MB_OKCANCEL | MB_ICONQUESTION) == IDOK)Quit();}}

}// 初始化游戏

void Init()

{initgraph(640, 480);srand((unsigned)time(NULL));// 显示操作说明setfont(14, 0, _T("宋体"));outtextxy(20, 330, _T("操作说明"));outtextxy(20, 350, _T("上:旋转"));outtextxy(20, 370, _T("左:左移"));outtextxy(20, 390, _T("右:右移"));outtextxy(20, 410, _T("下:下移"));outtextxy(20, 430, _T("空格:沉底"));outtextxy(20, 450, _T("ESC:退出"));// 设置坐标原点setorigin(220, 20);// 绘制游戏区边界rectangle(-1, -1, WIDTH * SIZE, HEIGHT * SIZE);rectangle((WIDTH 1) * SIZE - 1, -1, (WIDTH 5) * SIZE, 4 * SIZE);// 开始新游戏NewGame();

}// 退出游戏

void Quit()

{closegraph();exit(0);

}// 开始新游戏

void NewGame()

{// 清空游戏区setfillstyle(BLACK);bar(0, 0, WIDTH * SIZE - 1, HEIGHT * SIZE - 1);ZeroMemory(g_World, WIDTH * HEIGHT);// 生成下一个方块g_NextBlock.id = rand() % 7;g_NextBlock.dir = rand() % 4;g_NextBlock.x = WIDTH 1;g_NextBlock.y = HEIGHT - 1;// 获取新方块NewBlock();

}// 结束游戏

void GameOver()

{HWND wnd = GetHWnd();if (MessageBox(wnd, _T("游戏结束。n您想重新来一局吗?"), _T("游戏结束"), MB_YESNO | MB_ICONQUESTION) == IDYES)NewGame();elseQuit();

}// 获取控制命令

DWORD m_oldtime;

CMD GetCmd()

{// 获取控制值while(true){// 如果超时,自动下落一格DWORD newtime = GetTickCount();if (newtime - m_oldtime >= 500){m_oldtime = newtime;return CMD_DOWN;}// 如果有按键,返回按键对应的功能if (kbhit()){switch(getch()){case w:case W: return CMD_ROTATE;case a:case A: return CMD_LEFT;case d:case D: return CMD_RIGHT;case s:case S: return CMD_DOWN;case 27: return CMD_QUIT;case : return CMD_SINK;case 0:case 0xE0:switch(getch()){case 72: return CMD_ROTATE;case 75: return CMD_LEFT;case 77: return CMD_RIGHT;case 80: return CMD_DOWN;}}}// 延时 (降低 CPU 占用率)Sleep(20);}

}// 分发控制命令

void DispatchCmd(CMD _cmd)

{switch(_cmd){case CMD_ROTATE: OnRotate(); break;case CMD_LEFT: OnLeft(); break;case CMD_RIGHT: OnRight(); break;case CMD_DOWN: OnDown(); break;case CMD_SINK: OnSink(); break;case CMD_QUIT: break;}

}// 生成新的方块

void NewBlock()

{g_CurBlock.id = g_NextBlock.id, g_NextBlock.id = rand() % 7;g_CurBlock.dir = g_NextBlock.dir, g_NextBlock.dir = rand() % 4;g_CurBlock.x = (WIDTH - 4) / 2;g_CurBlock.y = HEIGHT 2;// 下移新方块直到有局部显示WORD c = g_Blocks[g_CurBlock.id].dir[g_CurBlock.dir];while((c & 0xF) == 0){g_CurBlock.y--;c >>= 4;}// 绘制新方块DrawBlock(g_CurBlock);// 绘制下一个方块setfillstyle(BLACK);bar((WIDTH 1) * SIZE, 0, (WIDTH 5) * SIZE - 1, 4 * SIZE - 1);DrawBlock(g_NextBlock);// 设置计时器,用于判断自动下落m_oldtime = GetTickCount();

}// 画方块

void DrawBlock(BLOCKINFO _block, DRAW _draw)

{WORD b = g_Blocks[_block.id].dir[_block.dir];int x, y;int color = BLACK;switch(_draw){case SHOW: color = g_Blocks[_block.id].color; break;case HIDE: color = BLACK; break;case FIX: color = g_Blocks[_block.id].color / 3; break;}setfillstyle(color);for(int i=0; i<16; i ){if (b & 0x8000){x = _block.x i % 4;y = _block.y - i / 4;if (y < HEIGHT){if (_draw != HIDE)bar3d(x * SIZE 2, (HEIGHT - y - 1) * SIZE 2, (x 1) * SIZE - 4, (HEIGHT - y) * SIZE - 4, 3, true);elsebar(x * SIZE, (HEIGHT - y - 1) * SIZE, (x 1) * SIZE - 1, (HEIGHT - y) * SIZE - 1);}}b <<= 1;}

}// 检测指定方块是否可以放下

bool CheckBlock(BLOCKINFO _block)

{WORD b = g_Blocks[_block.id].dir[_block.dir];int x, y;for(int i=0; i= WIDTH) || (y < 0))return false;if ((y < HEIGHT) && (g_World[x][y]))return false;}b <<= 1;}return true;

}// 旋转方块

void OnRotate()

{// 获取可以旋转的 x 偏移量int dx;BLOCKINFO tmp = g_CurBlock;tmp.dir ; if (CheckBlock(tmp)) { dx = 0; goto rotate; }tmp.x = g_CurBlock.x - 1; if (CheckBlock(tmp)) { dx = -1; goto rotate; }tmp.x = g_CurBlock.x 1; if (CheckBlock(tmp)) { dx = 1; goto rotate; }tmp.x = g_CurBlock.x - 2; if (CheckBlock(tmp)) { dx = -2; goto rotate; }tmp.x = g_CurBlock.x 2; if (CheckBlock(tmp)) { dx = 2; goto rotate; }return;rotate:// 旋转DrawBlock(g_CurBlock, HIDE);g_CurBlock.dir ;g_CurBlock.x = dx;DrawBlock(g_CurBlock);

}// 左移方块

void OnLeft()

{BLOCKINFO tmp = g_CurBlock;tmp.x--;if (CheckBlock(tmp)){DrawBlock(g_CurBlock, HIDE);g_CurBlock.x--;DrawBlock(g_CurBlock);}

}// 右移方块

void OnRight()

{BLOCKINFO tmp = g_CurBlock;tmp.x ;if (CheckBlock(tmp)){DrawBlock(g_CurBlock, HIDE);g_CurBlock.x ;DrawBlock(g_CurBlock);}

}// 下移方块

void OnDown()

{BLOCKINFO tmp = g_CurBlock;tmp.y--;if (CheckBlock(tmp)){DrawBlock(g_CurBlock, HIDE);g_CurBlock.y--;DrawBlock(g_CurBlock);}elseOnSink(); // 不可下移时,执行“沉底方块”操作

}// 沉底方块

void OnSink()

{int i, x, y;// 连续下移方块DrawBlock(g_CurBlock, HIDE);BLOCKINFO tmp = g_CurBlock;tmp.y--;while (CheckBlock(tmp)){g_CurBlock.y--;tmp.y--;}DrawBlock(g_CurBlock, FIX);// 固定方块在游戏区WORD b = g_Blocks[g_CurBlock.id].dir[g_CurBlock.dir];for(i = 0; i = HEIGHT){ // 如果方块的固定位置超出高度,结束游戏GameOver();return;}elseg_World[g_CurBlock.x i % 4][g_CurBlock.y - i / 4] = 1;}b = max(g_CurBlock.y - 3, 0); y--){i = 0;for(x = 0; x < WIDTH; x )if (g_World[x][y] == 1)i ;if (i == WIDTH){bRow = true;row[g_CurBlock.y - y] = 1;setfillstyle(WHITE, DIAGCROSS2_FILL);bar(0, (HEIGHT - y - 1) * SIZE SIZE / 2 - 2, WIDTH * SIZE - 1, (HEIGHT - y - 1) * SIZE SIZE / 2 2);}}if (bRow){// 延时 200 毫秒Sleep(200);// 擦掉刚才标记的行IMAGE img;for(i = 0; i < 4; i ){if (row[i]){for(y = g_CurBlock.y - i 1; y < HEIGHT; y )for(x = 0; x < WIDTH; x ){g_World[x][y - 1] = g_World[x][y];g_World[x][y] = 0;}getimage(&img, 0, 0, WIDTH * SIZE, (HEIGHT - (g_CurBlock.y - i 1)) * SIZE);putimage(0, SIZE, &img);}}}// 产生新方块NewBlock();

}

小游戏代码C语言DEV

#include

#include

#include

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define DOWN 0x5000

#define UP 0x4800

#define ESC 0x011b

int i,key;

int score=0;

int gamespeed=32000;

struct Food /*食物的结构体*/

{

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

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

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

}food;

struct Snack /*蛇的结构体*/

{

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 PrScore(void); /*分数输出函数*/

DELAY(char ch)/*调节游戏速度*/

{

if(ch==3)

{

delay(gamespeed); /*delay是延迟函数*/

}

else if(ch==2)

{

delay(gamespeed);

}

}

Menu()/*游戏开始菜单*/

{

char ch;

printf("Please choose the gamespeed:n");

printf("1-Fast 2-Normal 3-Slown");

printf("nPlease Press The numbers..n");

do

{ch=getch();}

while(ch!=1&&ch!=2&&ch!=3);

clrscr();

return(ch);

}

/*主函数*/

void main(void)

{

int ch;

ch=Menu();

Init();

DrawK();

GamePlay(ch);

Close();

}

void Init(void)

{

int gd=DETECT,gm;

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

cleardevice();

}

void DrawK(void)

{

setcolor(11);

setlinestyle(SOLID_LINE,0,THICK_WIDTH);

for(i=50;i0;i--) /*贪吃蛇的移动算法*/

{

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

snake.y[i]=snake.y[i-1]; /*贪吃蛇的身体移动算法*/

}

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;i

{

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

{

GameOver();

snake.life=1;

break;

}

}

/*下面是判断是否撞到墙壁*/

if(snake.x[0]595||snake.y[0]455)

{

GameOver();

snake.life=1;

}

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

break;

if(snake.x[0]==food.x&&snake.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;i

rectangle(snake.x[i],snake.y[i],snake.x[i] 10,snake.y[i]-10);

delay(gamespeed);

DELAY(ch);

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);

}

if(snake.life==1)

break;

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

if(key==ESC)

break;

else

if(key==UP&&snake.direction!=4)/*判断是否改变方向*/

snake.direction=3;

else

if(key==RIGHT&&snake.direction!=2)

snake.direction=1;

else

if(key==LEFT&&snake.direction!=1)

snake.direction=2;

else

if(key==DOWN&&snake.direction!=3)

snake.direction=4;

}

}

void GameOver(void)

{

cleardevice();

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,"scord:%d",score);

outtextxy(55,20,str);

}

void Close(void)

{

getch();

closegraph();

}