c语言实验小游戏 只需要什么是控制台应用程序序的,是一个5*5消消乐,

求一个用C语言编写的小游戏代码_百度知道
求一个用C语言编写的小游戏代码
请将代码发到
我有更好的答案
/*也不知道你是什么级别的,我是一个新手,刚接触编程语言,以下是我自己变得一个小程序,在所有c语言的编译器(vc++6.0、turbo…………)上都能运行,你还可以进一步改进。这是一个类似贪吃蛇的小游戏。祝你好运*//*贪吃蛇*/#include&stdio.h&#include&time.h&#include&conio.h&#include&stdlib.h&int head=3 ,tail=0;int main(){ int i,j,k=0; int zuobiao[2][80];
int direction=77;
int change(char qipan[20][80],int zuobiao[2][80],char direction); zuobiao[0][tail]=1;zuobiao[1][tail]=1;zuobiao[0][1]=1;zuobiao[1][1]=2;zuobiao[0][2]=1;zuobiao[1][2]=3;zuobiao[0][head]=1;zuobiao[1][head]=4; /*处理棋盘*/ char qipan[20][80];//定义棋盘
for(i=0;i&20;i++)
for(j=0;j&80;j++)
qipan[i][j]=' ';//初始化棋盘
for(i=0;i&80;i++)
qipan[0][i]='_';
for(i=0;i&20;i++)
qipan[i][0]='|';
for(i=0;i&20;i++)
qipan[i][79]='|';
for(i=0;i&80;i++)
qipan[19][i]='_';
qipan[1][1]=qipan[1][2]=qipan[1][3]='*';//初始化蛇的位置
qipan[1][4]='#';
printf(&This is a game of a SNAKE.\nGOOD LUCK TO YOU !\n&);
printf(&Input your game speed,please.(e.g.300)\n&);
scanf(&%d&,&gamespeed);while(direction!='q'){ system(&cls&);
for(i=0;i&20;i++)//打印出棋盘
for(j=0;j&80;j++)
printf(&%c&,qipan[i][j]);
timeover=1;
start=clock();
while(!kbhit()&&(timeover=clock()-start&=gamespeed));
if(timeover)
direction=getch();
direction=
if(!(direction==72||direction==80||direction==75||direction==77))
system(&cls&);
printf(&GAME OVER!\n&);
if(!change(qipan,zuobiao,direction))
direction='q';
system(&cls&);
printf(&GAME OVER!\n&);
}}return 0;} int change(char qipan[20][80],int zuobiao[2][80],char direction) {
if(direction==72)
x=zuobiao[0][head]-1;y=zuobiao[1][head];
if(direction==80)
x=zuobiao[0][head]+1;y=zuobiao[1][head];
if(direction==75)
x=zuobiao[0][head];y=zuobiao[0][head]-1;
if(direction==77)
x=zuobiao[0][head];y=zuobiao[1][head]+1;
if(x==0||x==18||y==78||y==0)
if(qipan[x][y]!=' ')
qipan[zuobiao[0][tail]][zuobiao[1][tail]]=' ';
tail=(tail+1)%80;
qipan[zuobiao[0][head]][zuobiao[1][head]]='*';
head=(head+1)%80;
zuobiao[0][head]=x;
zuobiao[1][head]=y;
qipan[zuobiao[0][head]][zuobiao[1][head]]='#';
return 1; }
采纳率:25%
#include &graphics.h&#include &conio.h&#include &time.h&/////////////////////////////////////////////// 定义常量、枚举量、结构体、全局变量/////////////////////////////////////////////#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 // 方块的颜色} g_Blocks[7] = { {0x0F00, 0xF00, 0x4444, RED},
{0x0, 0x0, BLUE},
{0xE0, 0x0, MAGENTA}, // L
{0xE20, 0x0, YELLOW}, // 反L
{0x0C60, 0xC60, 0x2640, CYAN},
{0x0, 0x0, GREEN}, // 反Z
{0x4E00, 0x4C40, 0x0E40, 0x4640, BROWN}}; // T// 定义当前方块、下一个方块的信息struct BLOCKINFO{
// 方块 ID char x, // 方块在游戏区中的坐标 byte dir:2; // 方向} g_CurBlock, g_NextB// 定义游戏区BYTE g_World[WIDTH][HEIGHT] = {0};/////////////////////////////////////////////// 函数声明/////////////////////////////////////////////void Init();
// 初始化游戏void Quit();
// 退出游戏void NewGame();
// 开始新游戏void GameOver();
// 结束游戏CMD
// 获取控制命令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 while(true) {
c = GetCmd();
DispatchCmd(c);
// 按退出时,显示对话框咨询用户是否退出
if (c == CMD_QUIT)
HWND wnd = GetHWnd();
if (MessageBox(wnd, _T(&您要退出游戏吗?&), _T(&提醒&), MB_OKCANCEL | MB_ICONQUESTION) == IDOK)
} }}// 初始化游戏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(); else
Quit();}// 获取控制命令DWORD m_CMD GetCmd(){ // 获取控制值 while(true) {
// 如果超时,自动下落一格
DWORD newtime = GetTickCount();
if (newtime - m_oldtime &= 500)
m_oldtime =
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 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();
case CMD_LEFT:
case CMD_RIGHT:
OnRight();
case CMD_DOWN:
case CMD_SINK:
case CMD_QUIT:
}}// 生成新的方块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, int color = BLACK; switch(_draw) {
case SHOW: color = g_Blocks[_block.id].
case HIDE: color = BLACK;
case FIX: color = g_Blocks[_block.id].color / 3; } 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);
bar(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, for(int i=0; i&16; i++) {
if (b & 0x8000)
x = _block.x + i % 4;
y = _block.y - i / 4;
if ((x & 0) || (x &= WIDTH) || (y & 0))
if ((y & HEIGHT) && (g_World[x][y]))
b &&= 1; } }// 旋转方块void OnRotate(){ // 获取可以旋转的 x 偏移量
BLOCKINFO tmp = g_CurB tmp.dir++;
if (CheckBlock(tmp)) { dx = 0;
} tmp.x = g_CurBlock.x - 1; if (CheckBlock(tmp)) { dx = -1;
} tmp.x = g_CurBlock.x + 1; if (CheckBlock(tmp)) { dx = 1;
} tmp.x = g_CurBlock.x - 2; if (CheckBlock(tmp)) { dx = -2;
} tmp.x = g_CurBlock.x + 2; if (CheckBlock(tmp)) { dx = 2;
} rotate: // 旋转 DrawBlock(g_CurBlock, HIDE); g_CurBlock.dir++; g_CurBlock.x += DrawBlock(g_CurBlock);}// 左移方块void OnLeft(){ BLOCKINFO tmp = g_CurB tmp.x--; if (CheckBlock(tmp)) {
DrawBlock(g_CurBlock, HIDE);
g_CurBlock.x--;
DrawBlock(g_CurBlock); }}// 右移方块void OnRight(){ BLOCKINFO tmp = g_CurB tmp.x++; if (CheckBlock(tmp)) {
DrawBlock(g_CurBlock, HIDE);
g_CurBlock.x++;
DrawBlock(g_CurBlock); }}// 下移方块void OnDown(){ BLOCKINFO tmp = g_CurB tmp.y--; if (CheckBlock(tmp)) {
DrawBlock(g_CurBlock, HIDE);
g_CurBlock.y--;
DrawBlock(g_CurBlock); } else
OnSink(); // 不可下移时,执行“沉底方块”操作}// 沉底方块void OnSink(){ int i, x, // 连续下移方块 DrawBlock(g_CurBlock, HIDE); BLOCKINFO tmp = g_CurB 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 & 16; i++) {
if (b & 0x8000)
if (g_CurBlock.y - i / 4 &= HEIGHT)
{ // 如果方块的固定位置超出高度,结束游戏
GameOver();
g_World[g_CurBlock.x + i % 4][g_CurBlock.y - i / 4] = 1;
b &&= 1; } // 检查是否需要消掉行,并标记 int row[4] = {0}; bool bRow = for(y = g_CurBlock.y; y &= max(g_CurBlock.y - 3, 0); y--) {
for(x = 0; x & WIDTH; x++)
if (g_World[x][y] == 1)
if (i == WIDTH)
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);
// 擦掉刚才标记的行
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-free3.5中不能运行?它提示graphics.h:No such file or dirrectory在什么软件中可以运行?
本人新手一枚,代码可能有点冗长,但是能运行。这是扫雷,输入行数 列数即可打开方块,输入行数#列数即可标记方块。#include&stdio.h&#include&math.h&#include&time.h&#include&stdlib.h&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, /*计数*/ int u,v; /*输入*/ int hang,lie,shu, /*自定义*/ srand((int)time(NULL)); h: /*选择模式*/ printf(&请选择模式\n1.标准
2.自定义\n&); scanf(&%d&,&choice); if(choice==2) {
printf(&请输入\n行数 列数 雷的个数\n&);
scanf(&%d%d%d&,&hang,&lie,&shu);
if(hang&2)
printf(&行数太少\n&);
if(hang&100)
printf(&行数太多\n&);
printf(&列数太少\n&);
if(lie&100)
printf(&列数太多\n&);
printf(&至少要有一个雷\n&);
if(shu&=(hang*lie))
printf(&雷太多了\n&);
while(t==1);
hang=10,lie=10,shu=10; } /*确定雷的位置*/
for(i=1;i&=i=i+1) {
z[i]=rand()%(hang*lie);
for(j=1;j&i;j=j+1)
if(z[i]==z[j])
while(t==1); } /*初始化a,b,c*/
for(i=0;i&=hang+1;i=i+1) {
for(j=0;j&=lie+1;j=j+1)
a[i][j]='1';
b[i][j]='1';
c[i][j]='0';
} } for(i=1;i&=i=i+1) {
for(j=1;j&=j=j+1)
a[i][j]='+';
} } /*把雷放入c*/
for(i=1;i&=i=i+1) {
x=z[i]/lie+1;
y=z[i]%lie+1;
c[x][y]='#'; } /*计算b中数字*/
for(i=1;i&=i=i+1) {
for(j=1;j&=j=j+1)
if(c[i-1][j-1]=='#')
if(c[i][j-1]=='#')
if(c[i-1][j]=='#')
if(c[i+1][j+1]=='#')
if(c[i][j+1]=='#')
if(c[i+1][j]=='#')
if(c[i+1][j-1]=='#')
if(c[i-1][j+1]=='#')
b[i][j]=m;
} } /*把雷放入b中*/
for(i=1;i&=i=i+1) {
x=z[i]/lie+1;
y=z[i]%lie+1;
b[x][y]='#'; } /*游戏设计*/ lei= do {
for(i=1;i&=i=i+1)
w=(i-1)/10+48;
printf(&%c&,w);
w=(i-1)%10+48;
printf(&%c
printf(&\n
for(i=1;i&=i=i+1)
printf(&---|&);
printf(&\n&);
for(i=1;i&=i=i+1)
w=(i-1)/10+48;
printf(&%c&,w);
w=(i-1)%10+48;
printf(&%c |&,w);
for(j=1;j&=j=j+1)
if(a[i][j]=='0')
printf(& %c |&,a[i][j]);
剩余雷个数&);
printf(&\n
for(j=1;j&=j=j+1)
printf(&---|&);
printf(&\n&);
scanf(&%d%c%d&,&u,&w,&v);
u=u+1,v=v+1;
if(w!='#'&&a[u][v]=='f')
if(w=='#')
if(a[u][v]=='+')
a[u][v]='f';
lei=lei-1;
else if(a[u][v]=='f')
a[u][v]='?';
lei=lei+1;
else if(a[u][v]=='?')
a[u][v]='+';
a[u][v]=b[u][v];
/*打开0区*/
if(a[u][v]=='0')
for(i=1;i&=i=i+1)
for(j=1;j&=j=j+1)
if(a[i-1][j-1]=='0')
if(a[i-1][j+1]=='0')
if(a[i-1][j]=='0')
if(a[i+1][j-1]=='0')
if(a[i+1][j+1]=='0')
if(a[i+1][j]=='0')
if(a[i][j-1]=='0')
if(a[i][j+1]=='0')
a[i][j]=b[i][j];
for(i=1;i&=i=i+1)
for(j=j&=1;j=j-1)
if(a[i-1][j-1]=='0')
if(a[i-1][j+1]=='0')
if(a[i-1][j]=='0')
if(a[i+1][j-1]=='0')
if(a[i+1][j+1]=='0')
if(a[i+1][j]=='0')
if(a[i][j-1]=='0')
if(a[i][j+1]=='0')
a[i][j]=b[i][j];
for(i=i&=1;i=i-1)
for(j=1;j&=j=j+1)
if(a[i-1][j-1]=='0')
if(a[i-1][j+1]=='0')
if(a[i-1][j]=='0')
if(a[i+1][j-1]=='0')
if(a[i+1][j+1]=='0')
if(a[i+1][j]=='0')
if(a[i][j-1]=='0')
if(a[i][j+1]=='0')
a[i][j]=b[i][j];
for(i=i&=1;i=i-1)
for(j=j&=1;j=j-1)
if(a[i-1][j-1]=='0')
if(a[i-1][j+1]=='0')
if(a[i-1][j]=='0')
if(a[i+1][j-1]=='0')
if(a[i+1][j+1]=='0')
if(a[i+1][j]=='0')
if(a[i][j-1]=='0')
if(a[i][j+1]=='0')
a[i][j]=b[i][j];
/*检测0区*/
for(i=1;i&=i=i+1)
for(j=1;j&=j=j+1)
if(a[i][j]=='0')
if(a[i-1][j-1]=='+'||a[i-1][j-1]=='f'||a[i-1][j-1]=='?')
if(a[i-1][j+1]=='+'||a[i-1][j+1]=='f'||a[i-1][j+1]=='?')
if(a[i+1][j-1]=='+'||a[i+1][j-1]=='f'||a[i+1][j-1]=='?')
if(a[i+1][j+1]=='+'||a[i+1][j+1]=='f'||a[i+1][j+1]=='?')
if(a[i+1][j]=='+'||a[i+1][j]=='f'||a[i+1][j]=='?')
if(a[i][j+1]=='+'||a[i][j+1]=='f'||a[i][j+1]=='?')
if(a[i][j-1]=='+'||a[i][j-1]=='f'||a[i][j-1]=='?')
if(a[i-1][j]=='+'||a[i-1][j]=='f'||a[i-1][j]=='?')
/*检查结束*/
for(i=1;i&=i=i+1)
for(j=1;j&=j=j+1)
if(a[i][j]!='+'&&a[i][j]!='f'&&a[i][j]!='?')
} while(a[u][v]!='#'&&n!=(hang*lie-shu)); /*游戏结束*/ for(i=1;i&=i=i+1) {
x=z[i]/lie+1;
y=z[i]%lie+1;
a[x][y]='#'; } printf(&
&); for(i=1;i&=i=i+1) {
w=(i-1)/10+48;
printf(&%c&,w);
w=(i-1)%10+48;
printf(&%c
&,w); } printf(&\n
|&); for(i=1;i&=i=i+1) {
printf(&---|&); } printf(&\n&); for(i=1;i&=i=i+1) {
w=(i-1)/10+48;
printf(&%c&,w);
w=(i-1)%10+48;
printf(&%c |&,w);
for(j=1;j&=j=j+1)
if(a[i][j]=='0')
printf(& %c |&,a[i][j]);
/*if(i==2)
剩余雷个数&);
%d&,lei);*/
printf(&\n
for(j=1;j&=j=j+1)
printf(&---|&);
printf(&\n&); } if(n==(hang*lie-shu)) printf(&success!\n&); else printf(&game over!\n&); printf(&重玩请输入1\n&); t=0; scanf(&%d&,&t); if(t==1) }
1条折叠回答
为您推荐:
其他类似问题
c语言的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。用VC++6.0的控制台实现2048小游戏的程序
转载 & & 作者:geek_monkey
本文是作者拜读刘地同学的《C语言控制台版2048》之后感觉非常不错,添加了注释之后分享给大家的,方便更多的初学者阅读学习,有需要的小伙伴参考下。
首先感谢这位大侠的无私分享,仔细学习这个程序以后收获很多,试着添加一些注释
源程序是从开源中国看到的,原作者是 刘地(sir?)
地址为http://www.oschina.net/code/snippet_40
geek_monkey于日为拜读该程序,受益匪浅
为了方便自己,以及更多初学者阅读,我试着写了写了注释供参考
我是C语言初学者,如有错误希望指正。轻喷
#include &stdlib.h&
#include &stdio.h&
#include &conio.h&
#include &time.h&
int x[4][4],y[4][4],z=0,o=0;//z表示的是当前矩阵中的非零数字的数量,z为16则说明数字排满了,本局输了
&&&&&&&&&&&&&&&&&&&&&&&&&&& //o表示最大数字的值,本例设定的是1024
typedef int row[4];& //row代表具有4个元素的整型数组
row *p=x, *q=y;//P是整型指针数组,有4组,每组有4个元素。p[1]=x[1]=*(x+1)
void show()//显示函数
&&& int i,j;
&&& for(i=0;i&4;i++)
&&&&&&& for(j=0;j&4;j++)
&&&&&&&&&&& if(p[i][j]==0)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& printf("-&&&& ");//没有放置数字(也就是数字为0时)显示一个小横杠
&&&&&&&&&&& }
&&&&&&&&&&& else
&&&&&&&&&&& {
&&&&&&&&&&&&&&& printf("%-4d& ",p[i][j]);//显示位宽为4的整数,-表示左对齐
&&&&&&&&&&& }
&&&&&&& printf("\n\n");
&&& printf("\n\n");
void over()//将2维数组左右对调
&&& int i,j;
&&& row *r;
&&& for(i=0;i&4;i++)
&&&&&&& for(j=0;j&4;j++)
&&&&&&&&&&& q[i][3-j]=p[i][j];
&&& r=p,p=q,q=r;
void left()//将2维数组逆时针转动90°
&&& int i,j;
&&& row *r;
&&& for(i=0;i&4;i++)
&&&&&&& for(j=0;j&4;j++)
&&&&&&&&&&& q[3-j][i]=p[i][j];
&&& r=p,p=q,q=r;
void right()//将2维数组顺时针转动90°
&&& int i,j;
&&& row *r;
&&& for(i=0;i&4;i++)
&&&&&&& for(j=0;j&4;j++)
&&&&&&&&&&& q[j][3-i]=p[i][j];
&&& r=p,p=q,q=r;
void inc()//此函数的作用是在0数字的位置上随机放置一个2或者4
&&& int i,j,k;
&&& for(;;)
&&&&&&& k=rand()%16,i=k/4,j=k%4;//这个操作可以保证i,j小于等于4,不会放到二维数组外边
&&&&&&& if(p[i][j]==0)//确认p[i][j]是空白的,然后才能放置2或者4
&&& if(rand()%2) //随机产生2或者4,理论上rand()%2的结果,0,1,几率各占一半
&&&&&&& p[i][j]=4;
&&&&&&& p[i][j]=2;
void merge(char c)
&&& int i,j,k,t;
&&& switch(c)//注,这个stitch没有default,也没有给按下右方向键的处理语句。即,按下右方向键,则跳过switch
&&&&&&& case 'H'://检测到按了上方向键
&&&&&&&&&&& right();//顺时针转动90度
&&&&&&& case 'K'://左
&&&&&&&&&&& over();//左右对称换
&&&&&&& case 'P'://下
&&&&&&&&&&& left(); //逆90
&&& //上边这个switch语句是将矩阵变换,将数字推向上,左或者下的操作转换为推向右的操作。
&&& //下边这个循环语句的功能是,把每一行的数字都往右边推,数字大小一样则合并。
&&& for(i=0;i&4;i++)//一行一行地检测
&&&&&&& for(j=k=3;j&=0 && p[i][j]==0;j--);//从第i行的右边开始,向左找非零元素。也就是要让p[i][j]不为0的时候,结束本条for语句
&&&&&&& if(j&0)//经过下边的右推操作,第i行最左边的值也非0,说明此行操作结束,跳出i的for循环,执行i+1行的右推操作
&&&&&&&&&&& t=p[i][j],p[i][j]=0,p[i][k]=t;//P[i][j]是P[i][k]左边的一个数。这里的j的值是由上一条语句找出来的,通过t传值保证了这个p[i][k]不为0
&&&&&&&&&&& for(j--;j&=0;j--)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& t=p[i][j];
&&&&&&&&&&&&&&& if(t!=0)//如果p[i][j]不为0,就检测它与右侧的p[i][k]是否为相同
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&& p[i][j]=0;
&&&&&&&&&&&&&&&&&&& if(p[i][k]==t)
&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&& z--,p[i][k]+=t;//相同则加倍,同时非0数字的数量减少一个
&&&&&&&&&&&&&&&&&&&&&&& o=(t==512);//t为512代表最大值是1024,此时o==1,游戏以胜利结束
&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&& else
&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&& k--,p[i][k]=t;//不停则将p[i][j]的值赋给p[i][k],即数据右移动一位
&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& }
&&&&&&&&&&& }
&&& switch(c)
&&&&&&& case 'H'://按下,上方向键,矩阵逆时针旋转90°。这个操作与之前那个switch正好相反
&&&&&&&&&&& left();
&&&&&&& case 'K'://左右再次对调
&&&&&&&&&&& over();
&&&&&&& case 'P':
&&&&&&&&&&& right();
&&& inc();
int main()
&&& char a,b;
&&& srand(time(NULL));
&&& inc();
&&& inc();//放置两个初始值
&&& show();
&&& while(z&16 && !o)//游戏结束条件,z==16或者o==1
&&&&&&& a=getch();
&&&&&&& if(a==-32)//方向键的第一个字节为-32.char是无符的,这里为什么是-32还没弄明白
&&&&&&&&&&& b=getch();
&&&&&&&&&&& if(b==72||b==75||b==77||b==80)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& merge(b);
&&&&&&&&&&&&&&& show();
&&&&&&&&&&& }
&&&&&&& printf("congratulations!");
&&&&&&& printf("sorry, you failed!");
&&& getch();
&&& return 0;
特殊按键是两个字节,第一个字节是表示按的是特殊键的(普通键就一个字节),第 二个字节就是按键的ASCII码,
当按下“普通键”时,它的低8位数存放该字符的ASCII码。
对于特殊键,低8位为0。特殊键包括箭头键、功能键等。高8位字节存放该键的扫描码
#define KEY_LEFT 75&& K&& 左
#define KEY_RIGHT 77& M&& 右
#define KEY_UP 72&&&& H&& 上
#define KEY_DOWN 80&& P&& 下
以上就是本文分享的内容了,希望对大家学习VC++能有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具C语言/C++ 开发 消消乐游戏_腾讯视频
三倍流畅播放
1080P蓝光画质
新剧提前看
1080P蓝光画质
纯净式无框播放器
三倍流畅播放
扫一扫 手机继续看
下载需先安装客户端
{clientText}
客户端特权:
3倍流畅播放
当前播放至 {time}
扫一扫 手机继续看
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要}

我要回帖

更多关于 vs创建控制台应用程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信