c的可以吗?
#define N 200
#include <graphics.h>
#include <stdlib.h>
#include <dos.h>
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
int i,key;
int score=0;/*得分*/
int gamespeed=50000;/*游戏速度自己调整*/
struct Food
{
int x;/*食物的横坐标*/
int y;/*食物的纵坐标*/
int yes;/*判断是否要出现食物的变量*/
}food;/*食物的结构体*/
struct Snake
{
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);/*玩游戏具体过程*/
void PrScore(void);/*输出成绩*/
/*主函数*/
void main(void)
{
Init();/*图形驱动*/
DrawK();/*开始画面*/
GamePlay();/*玩游戏具体过程*/
Close();/*图形结束*/
}
/*图形驱动*/
void Init(void)
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc");
cleardevice();
}
/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/
void DrawK(void)
{
/*setbkcolor(LIGHTGREEN);*/
setcolor(11);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/
for(i=50;i<=600;i+=10)/*画围墙*/
{
rectangle(i,40,i+10,49); /*上边*/
rectangle(i,451,i+10,460);/*下边*/
}
for(i=40;i<=450;i+=10)
{
rectangle(50,i,59,i+10); /*左边*/
rectangle(601,i,610,i+10);/*右边*/
}
}
/*玩游戏具体过程*/
void GamePlay(void)
{
randomize();/*随机数发生器*/
food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/
snake.life=0;/*活着*/
snake.direction=1;/*方向往右*/
snake.x[0]=100;snake.y[0]=100;/*蛇头*/
snake.x[1]=110;snake.y[1]=100;
snake.node=2;/*节数*/
PrScore();/*输出得分*/
while(1)/*可以重复玩游戏,压ESC键结束*/
{
while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/
{
if(food.yes==1)/*需要出现新食物*/
{
food.x=rand()%400+60;
food.y=rand()%350+60;
while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/
food.x++;
while(food.y%10!=0)
food.y++;
food.yes=0;/*画面上有食物了*/
}
if(food.yes==0)/*画面上有食物了就要显示*/
{
setcolor(GREEN);
rectangle(food.x,food.y,food.x+10,food.y-10);
}
for(i=snake.node-1;i>0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/
{
snake.x[i]=snake.x[i-1];
snake.y[i]=snake.y[i-1];
}
/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/
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<snake.node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/
{
if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])
{
GameOver();/*显示失败*/
snake.life=1;
break;
}
}
if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||
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<snake.node;i++)
rectangle(snake.x[i],snake.y[i],snake.x[i]+10,
snake.y[i]-10);
delay(gamespeed);
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);
} /*endwhile(!kbhit)*/
if(snake.life==1)/*如果蛇死就跳出循环*/
break;
key=bioskey(0);/*接收按键*/
if(key==ESC)/*按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;
}/*endwhile(1)*/
}
/*游戏结束*/
void GameOver(void)
{
cleardevice();
PrScore();
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,"score:%d",score);
outtextxy(55,20,str);
}
/*图形结束*/
void Close(void)
{
getch();
closegraph();
}
B. Unity打包好的游戏可以反编译得到源码和资源吗
在Unity3D中,代码会编译到Assembly-CSharp.dll。基于以上两点,代码的保护有以下两种:
第一种是对代码进行混淆,诸如混淆软件CodeGuard、CryptoObfuscator、de4dot
第二种是对Assembly-CSharp.dll进行加密后,重新对mono进行编译。
Virbox Protector直接进行加壳后,无需手动编译mono,能防止反编译。
C. sourceforge下载到的游戏源代码 不会编译 makefile
一般来讲,这些程序都可以在linux下编译,如果现在windows下编译,可下一个windows的linux仿真环境,如cygwin.
看目录下有没有configure的文件,先执行他,根据你的计算机配置,生成makefile,再执行make即可。
D. 求c语言编译小游戏的代码,比如扫雷原代码等
#include <graphics.h>
#include <stdlib.h>
#include <dos.h>
#define LEFTPRESS 0xff01
#define LEFTCLICK 0xff10
#define LEFTDRAG 0xff19
#define MOUSEMOVE 0xff08
struct
{
int num;/*格子当前处于什么状态,1有雷,0已经显示过数字或者空白格子*/
int roundnum;/*统计格子周围有多少雷*/
int flag;/*右键按下显示红旗的标志,0没有红旗标志,1有红旗标志*/
}Mine[10][10];
int gameAGAIN=0;/*是否重来的变量*/
int gamePLAY=0;/*是否是第一次玩游戏的标志*/
int mineNUM;/*统计处理过的格子数*/
char randmineNUM[3];/*显示数字的字符串*/
int Keystate;
int MouseExist;
int MouseButton;
int MouseX;
int MouseY;
void Init(void);/*图形驱动*/
void MouseOn(void);/*鼠标光标显示*/
void MouseOff(void);/*鼠标光标隐藏*/
void MouseSetXY(int,int);/*设置当前位置*/
int LeftPress(void);/*左键按下*/
int RightPress(void);/*鼠标右键按下*/
void MouseGetXY(void);/*得到当前位置*/
void Control(void);/*游戏开始,重新,关闭*/
void GameBegain(void);/*游戏开始画面*/
void DrawSmile(void);/*画笑脸*/
void DrawRedflag(int,int);/*显示红旗*/
void DrawEmpty(int,int,int,int);/*两种空格子的显示*/
void GameOver(void);/*游戏结束*/
void GameWin(void);/*显示胜利*/
int MineStatistics(int,int);/*统计每个格子周围的雷数*/
int ShowWhite(int,int);/*显示无雷区的空白部分*/
void GamePlay(void);/*游戏过程*/
void Close(void);/*图形关闭*/
void main(void)
{
Init();
Control();
Close();
}
void Init(void)/*图形开始*/
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc");
}
void Close(void)/*图形关闭*/
{
closegraph();
}
void MouseOn(void)/*鼠标光标显示*/
{
_AX=0x01;
geninterrupt(0x33);
}
void MouseOff(void)/*鼠标光标隐藏*/
{
_AX=0x02;
geninterrupt(0x33);
}
void MouseSetXY(int x,int y)/*设置当前位置*/
{
_CX=x;
_DX=y;
_AX=0x04;
geninterrupt(0x33);
}
int LeftPress(void)/*鼠标左键按下*/
{
_AX=0x03;
geninterrupt(0x33);
return(_BX&1);
}
int RightPress(void)/*鼠标右键按下*/
{
_AX=0x03;
geninterrupt(0x33);
return(_BX&2);
}
void MouseGetXY(void)/*得到当前位置*/
{
_AX=0x03;
geninterrupt(0x33);
MouseX=_CX;
MouseY=_DX;
}
void Control(void)/*游戏开始,重新,关闭*/
{
int gameFLAG=1;/*游戏失败后判断是否重新开始的标志*/
while(1)
{
if(gameFLAG)/*游戏失败后没判断出重新开始或者退出游戏的话就继续判断*/
{
GameBegain(); /*游戏初始画面*/
GamePlay();/*具体游戏*/
if(gameAGAIN==1)/*游戏中重新开始*/
{
gameAGAIN=0;
continue;
}
}
MouseOn();
gameFLAG=0;
if(LeftPress())/*判断是否重新开始*/
{
MouseGetXY();
if(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85)
{
gameFLAG=1;
continue;
}
}
if(kbhit())/*判断是否按键退出*/
break;
}
MouseOff();
}
void DrawSmile(void)/*画笑脸*/
{
setfillstyle(SOLID_FILL,YELLOW);
fillellipse(290,75,10,10);
setcolor(YELLOW);
setfillstyle(SOLID_FILL,BLACK);/*眼睛*/
fillellipse(285,75,2,2);
fillellipse(295,75,2,2);
setcolor(BLACK);/*嘴巴*/
bar(287,80,293,81);
}
void DrawRedflag(int i,int j)/*显示红旗*/
{
setcolor(7);
setfillstyle(SOLID_FILL,RED);
bar(198+j*20,95+i*20,198+j*20+5,95+i*20+5);
setcolor(BLACK);
line(198+j*20,95+i*20,198+j*20,95+i*20+10);
}
void DrawEmpty(int i,int j,int mode,int color)/*两种空格子的显示*/
{
setcolor(color);
setfillstyle(SOLID_FILL,color);
if(mode==0)/*没有单击过的大格子*/
bar(200+j*20-8,100+i*20-8,200+j*20+8,100+i*20+8);
else
if(mode==1)/*单击过后显示空白的小格子*/
bar(200+j*20-7,100+i*20-7,200+j*20+7,100+i*20+7);
}
void GameBegain(void)/*游戏开始画面*/
{
int i,j;
cleardevice();
if(gamePLAY!=1)
{
MouseSetXY(290,70); /*鼠标一开始的位置,并作为它的初始坐标*/
MouseX=290;
MouseY=70;
}
gamePLAY=1;/*下次按重新开始的话鼠标不重新初始化*/
mineNUM=0;
setfillstyle(SOLID_FILL,7);
bar(190,60,390,290);
for(i=0;i<10;i++)/*画格子*/
for(j=0;j<10;j++)
DrawEmpty(i,j,0,8);
setcolor(7);
DrawSmile();/*画脸*/
randomize();__page_break__
for(i=0;i<10;i++)/*100个格子随机赋值有没有地雷*/
for(j=0;j<10;j++)
{
Mine[i][j].num=random(8);/*如果随机数的结果是1表示这个格子有地雷*/
if(Mine[i][j].num==1)
mineNUM++;/*现有雷数加1*/
else
Mine[i][j].num=2;
Mine[i][j].flag=0;/*表示没红旗标志*/
}
sprintf(randmineNUM,"%d",mineNUM); /*显示这次总共有多少雷数*/
setcolor(1);
settextstyle(0,0,2);
outtextxy(210,70,randmineNUM);
mineNUM=100-mineNUM;/*变量取空白格数量*/
MouseOn();
}
void GameOver(void)/*游戏结束画面*/
{
int i,j;
setcolor(0);
for(i=0;i<10;i++)
for(j=0;j<10;j++)
if(Mine[i][j].num==1)/*显示所有的地雷*/
{
DrawEmpty(i,j,0,RED);
setfillstyle(SOLID_FILL,BLACK);
fillellipse(200+j*20,100+i*20,7,7);
}
}
void GameWin(void)/*显示胜利*/
{
setcolor(11);
settextstyle(0,0,2);
outtextxy(230,30,"YOU WIN!");
}
int MineStatistics(int i,int j)/*统计每个格子周围的雷数*/
{
int nNUM=0;
if(i==0&&j==0)/*左上角格子的统计*/
{
if(Mine[0][1].num==1)
nNUM++;
if(Mine[1][0].num==1)
nNUM++;
if(Mine[1][1].num==1)
nNUM++;
}
else
if(i==0&&j==9)/*右上角格子的统计*/
{
if(Mine[0][8].num==1)
nNUM++;
if(Mine[1][9].num==1)
nNUM++;
if(Mine[1][8].num==1)
nNUM++;
}
else
if(i==9&&j==0)/*左下角格子的统计*/
{
if(Mine[8][0].num==1)
nNUM++;
if(Mine[9][1].num==1)
nNUM++;
if(Mine[8][1].num==1)
nNUM++;
}
else
if(i==9&&j==9)/*右下角格子的统计*/
{
if(Mine[9][8].num==1)
nNUM++;
if(Mine[8][9].num==1)
nNUM++;
if(Mine[8][8].num==1)
nNUM++;
}
else if(j==0)/*左边第一列格子的统计*/
{
if(Mine[i][j+1].num==1)
nNUM++;
if(Mine[i+1][j].num==1)
nNUM++;
if(Mine[i-1][j].num==1)
nNUM++;
if(Mine[i-1][j+1].num==1)
nNUM++;
if(Mine[i+1][j+1].num==1)
nNUM++;
}
else if(j==9)/*右边第一列格子的统计*/
{
if(Mine[i][j-1].num==1)
nNUM++;
if(Mine[i+1][j].num==1)
nNUM++;
if(Mine[i-1][j].num==1)
nNUM++;
if(Mine[i-1][j-1].num==1)
nNUM++;
if(Mine[i+1][j-1].num==1)
nNUM++;
}
else if(i==0)/*第一行格子的统计*/
{
if(Mine[i+1][j].num==1)
nNUM++;
if(Mine[i][j-1].num==1)
nNUM++;
if(Mine[i][j+1].num==1)
nNUM++;
if(Mine[i+1][j-1].num==1)
nNUM++;
if(Mine[i+1][j+1].num==1)
nNUM++;
}
else if(i==9)/*最后一行格子的统计*/
{
if(Mine[i-1][j].num==1)
nNUM++;
if(Mine[i][j-1].num==1)
nNUM++;
if(Mine[i][j+1].num==1)
nNUM++;
if(Mine[i-1][j-1].num==1)
nNUM++;
if(Mine[i-1][j+1].num==1)
nNUM++;
}
else/*普通格子的统计*/
{
if(Mine[i-1][j].num==1)
nNUM++;
if(Mine[i-1][j+1].num==1)
nNUM++;
if(Mine[i][j+1].num==1)
nNUM++;
if(Mine[i+1][j+1].num==1)
nNUM++;
if(Mine[i+1][j].num==1)
nNUM++;
if(Mine[i+1][j-1].num==1)
nNUM++;
if(Mine[i][j-1].num==1)
nNUM++;
if(Mine[i-1][j-1].num==1)
nNUM++;
}__page_break__
return(nNUM);/*把格子周围一共有多少雷数的统计结果返回*/
}
int ShowWhite(int i,int j)/*显示无雷区的空白部分*/
{
if(Mine[i][j].flag==1||Mine[i][j].num==0)/*如果有红旗或该格处理过就不对该格进行任何判断*/
return;
mineNUM--;/*显示过数字或者空格的格子就表示多处理了一个格子,当所有格子都处理过了表示胜利*/
if(Mine[i][j].roundnum==0&&Mine[i][j].num!=1)/*显示空格*/
{
DrawEmpty(i,j,1,7);
Mine[i][j].num=0;
}
else
if(Mine[i][j].roundnum!=0)/*输出雷数*/
{
DrawEmpty(i,j,0,8);
sprintf(randmineNUM,"%d",Mine[i][j].roundnum);
setcolor(RED);
outtextxy(195+j*20,95+i*20,randmineNUM);
Mine[i][j].num=0;/*已经输出雷数的格子用0表示已经用过这个格子*/
return ;
}
/*8个方向递归显示所有的空白格子*/
if(i!=0&&Mine[i-1][j].num!=1)
ShowWhite(i-1,j);
if(i!=0&&j!=9&&Mine[i-1][j+1].num!=1)
ShowWhite(i-1,j+1);
if(j!=9&&Mine[i][j+1].num!=1)
ShowWhite(i,j+1);
if(j!=9&&i!=9&&Mine[i+1][j+1].num!=1)
ShowWhite(i+1,j+1);
if(i!=9&&Mine[i+1][j].num!=1)
ShowWhite(i+1,j);
if(i!=9&&j!=0&&Mine[i+1][j-1].num!=1)
ShowWhite(i+1,j-1);
if(j!=0&&Mine[i][j-1].num!=1)
ShowWhite(i,j-1);
if(i!=0&&j!=0&&Mine[i-1][j-1].num!=1)
ShowWhite(i-1,j-1);
}
void GamePlay(void)/*游戏过程*/
{
int i,j,Num;/*Num用来接收统计函数返回一个格子周围有多少地雷*/
for(i=0;i<10;i++)
for(j=0;j<10;j++)
Mine[i][j].roundnum=MineStatistics(i,j);/*统计每个格子周围有多少地雷*/
while(!kbhit())
{
if(LeftPress())/*鼠标左键盘按下*/
{
MouseGetXY();
if(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85)/*重新来*/
{
MouseOff();
gameAGAIN=1;
break;
}
if(MouseX>190&&MouseX<390&&MouseY>90&&MouseY<290)/*当前鼠标位置在格子范围内*/
{
j=(MouseX-190)/20;/*x坐标*/
i=(MouseY-90)/20;/*y坐标*/
if(Mine[i][j].flag==1)/*如果格子有红旗则左键无效*/
continue;
if(Mine[i][j].num!=0)/*如果格子没有处理过*/
{
if(Mine[i][j].num==1)/*鼠标按下的格子是地雷*/
{
MouseOff();
GameOver();/*游戏失败*/
break;
}
else/*鼠标按下的格子不是地雷*/
{
MouseOff();
Num=MineStatistics(i,j);
if(Num==0)/*周围没地雷就用递归算法来显示空白格子*/
ShowWhite(i,j);
else/*按下格子周围有地雷*/
{
sprintf(randmineNUM,"%d",Num);/*输出当前格子周围的雷数*/
setcolor(RED);
outtextxy(195+j*20,95+i*20,randmineNUM);
mineNUM--;
}
MouseOn();
Mine[i][j].num=0;/*点过的格子周围雷数的数字变为0表示这个格子已经用过*/
if(mineNUM<1)/*胜利了*/
{
GameWin();
break;
}
}
}
}
}
if(RightPress())/*鼠标右键键盘按下*/
{
MouseGetXY();
if(MouseX>190&&MouseX<390&&MouseY>90&&MouseY<290)/*当前鼠标位置在格子范围内*/
{
j=(MouseX-190)/20;/*x坐标*/
i=(MouseY-90)/20;/*y坐标*/
MouseOff();
if(Mine[i][j].flag==0&&Mine[i][j].num!=0)/*本来没红旗现在显示红旗*/
{
DrawRedflag(i,j);
Mine[i][j].flag=1;
}
else
if(Mine[i][j].flag==1)/*有红旗标志再按右键就红旗消失*/
{
DrawEmpty(i,j,0,8);
Mine[i][j].flag=0;
}
}
MouseOn();
sleep(1);
}
}
}
E. 网上的小游戏源代码 要怎么样在编译器上运行起来
看你的小游戏是基于什么开发的
不同的源码需要用不同的编译器加环境的
有Java的 有C的 有C++的 有flash的 都不一样的
F. 有游戏源码文件,怎么把它变成可以玩的游戏
游戏源码是完整的么,什么语言写的,相应的搭建环境即可,要编译的得编译,是app版,还是h5,不会的话可以帮代搭建
G. 跪求能在c++6.0编译的贪食蛇、俄罗斯方块等游戏的C++源代码!!!
/******************************************************************
贪食蛇 Preview
此版本贪吃蛇用蛇的方块是集合用的是数组
蛇移动是以Sleep()阻断进程实现的
故蛇移动看似较为卡顿,且数组插入数据效率较低,
故操作体验十分一般
*******************************************************************/
#include<windows.h>
#include <time.h>
#pragma comment(lib,"winmm.lib")
#define LENGTH 40 //游戏场地的宽
#define WIDTH 10 //组成蛇的的正方形的边长
#define RANGE 50 //游戏场地与客户去之间间隔
#define SNAKE_COLOR RGB(255,0,0) //蛇的颜色
#define BK_COLOR RGB(204,232,207) //窗体背景色
#define NO_SNAKE 0
#define HAS_SNAKE 1
#define STEP 2
#define MAKECOOR(x) (x)*WIDTH //把flags数组的下标映射为坐标
typedef struct
{
int x;
int y;
int flag;
} GRID;//蛇的结构
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
void MakePartSnake(int,int,int,GRID *); //为蛇身增加或设置一个方块
void MoveSnake(HWND); //移动蛇
void MakeFood(GRID *food); //制造随机方块
void initializer(); //初始化游戏
void Manager();
TCHAR szAppName[] = TEXT("Gluttony Snake");
int flags[LENGTH][LENGTH]; //游戏区域所有方块的状态标记
RECT playground; //游戏场地
GRID *snake = NULL; //蛇所在位置数组
GRID *food = NULL; //食物对象
static int MAX_LENGTH = 0;//默认蛇分配的最大长度(可变的)
int snake_len = 0;
int direct = 0;
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PSTR szCmdLine,
int iCmdShow)
{
MSG msg;
HWND hwnd;
WNDCLASS wndclass;
while(TRUE)
{
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hbrBackground=CreateSolidBrush(RGB(203,202,201));
wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
wndclass.hInstance = hInstance;
wndclass.lpfnWndProc = WndProc;
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
wndclass.style = CS_VREDRAW | CS_HREDRAW;
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("Register class failed!! Retry??"),szAppName,0);
return 0;
}
break;
}
hwnd = CreateWindow(szAppName,
TEXT("Gluttony Snake Preview V1.0.1"),
WS_OVERLAPPEDWINDOW ^ WS_THICKFRAME ^ WS_MINIMIZEBOX ^ WS_MAXIMIZEBOX,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,NULL,
hInstance,
NULL);
ShowWindow(hwnd,SW_NORMAL);
UpdateWindow(hwnd);
while(TRUE)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
if(msg.message == WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
MoveSnake(hwnd);
}
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
HBRUSH hBrush;
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_CREATE:
//PlaySound(TEXT("HG.wav"),NULL ,SND_ASYNC | SND_LOOP);//播放游戏音乐;
initializer();
MoveWindow(hwnd,RANGE * 2,RANGE * 2,WIDTH * LENGTH + RANGE * 3,WIDTH * LENGTH + RANGE * 3,TRUE);
return 0;
case WM_KEYDOWN:
switch(wParam)
{
case VK_LEFT:
if(direct != VK_RIGHT)
direct = VK_LEFT;
break;
case VK_RIGHT:
if(direct != VK_LEFT)
direct = VK_RIGHT;
break;
case VK_UP:
if(direct != VK_DOWN)
direct = VK_UP;
break;
case VK_DOWN:
if(direct != VK_UP)
direct = VK_DOWN;
break;
default:
break;
}
return 0;
case WM_PAINT:
for(int i = 0; i != snake_len; ++i)
{
flags[(snake + i)->x][(snake + i)->y] = (snake + i)->flag;
}
hdc = BeginPaint(hwnd,&ps);
SetViewportOrgEx(hdc,RANGE/2,RANGE,NULL);
hBrush = CreateSolidBrush(BK_COLOR);
SelectObject(hdc,hBrush);
Rectangle(hdc,playground.left,playground.top,playground.right,playground.bottom);
DeleteObject(hBrush);
hBrush = CreateSolidBrush(SNAKE_COLOR);
SelectObject(hdc,hBrush);
for(int i = 0; i != LENGTH;++i)
{
for(int j = 0; j != LENGTH;++j)
{
if(flags[i][j] == HAS_SNAKE)
{
Rectangle(hdc,MAKECOOR(i),MAKECOOR(j),MAKECOOR(i+1),MAKECOOR(j+1));
}
}
}
DeleteObject(hBrush);
EndPaint(hwnd,&ps);
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
//////////////////////////初始化游戏各个参数////////////////////////////////////////////////////////////
void initializer()
{
if(snake != NULL)
free(snake);
if(food != NULL)
free(food);
snake_len = 3; //蛇的初始长度为3
direct = VK_RIGHT; //蛇的初始方向为向右
MAX_LENGTH = 100; //蛇默认最初分配最大长度为20
food = (GRID *)calloc(1,sizeof(GRID));//分配储存food的内存
snake = (GRID *)calloc(MAX_LENGTH,sizeof(GRID));//分配储存蛇的内存
/*************初始化游戏场地*******************/
playground.left = 0;
playground.top = 0;
playground.right = WIDTH * LENGTH;
playground.bottom = WIDTH * LENGTH;
/**************初始化游戏场地********************/
for(int i = 0 ;i < LENGTH;++i)
{
for(int j = 0; j < LENGTH;++j)
{
flags[i][j] = NO_SNAKE;
}
}
for(int i = 0; i != snake_len;++i)
{
MakePartSnake(LENGTH / 2 + 2 - i,LENGTH / 2,HAS_SNAKE,(snake + i));
}///初始化蛇
MakeFood(food);///产生food
}
void MakePartSnake(int x,int y,int flag,GRID * snake)
{
snake->x = x;
snake->y = y;
snake->flag = flag;
}
////////////////////////////////////////////////////////////////////////////////
//////////////////控制蛇的移动///////////////////////
void MoveSnake(HWND hwnd)
{
Manager();
flags[(snake + snake_len - 1)->x][(snake + snake_len - 1)->y] = NO_SNAKE;//把蛇的尾部去除(表现为蛇移动一格)
for(int i = snake_len - 1; i > 0;--i)
{
(snake+i)->x = (snake + i -1)->x;
(snake+i)->y = (snake + i -1)->y;
}
if(direct == VK_LEFT)
{
snake->x -= 1;
}
if(direct == VK_RIGHT)
{
snake->x += 1;
}
if(direct == VK_UP)
{
snake->y -= 1;
}
if(direct == VK_DOWN)
{
snake->y += 1;
}
InvalidateRect(hwnd,NULL,FALSE);
Sleep(200);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////通过随机生成food
void MakeFood(GRID *food)
{
srand((unsigned) time(NULL));
food->x = rand() % LENGTH;
food->y = rand() % LENGTH;
food->flag = HAS_SNAKE;
flags[food->x][food->y] = food->flag;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////游戏规则的映射及内存的处理///////////////////////////////////////////////////
void Manager()
{
if(snake_len >= MAX_LENGTH - 2)
{
MAX_LENGTH += STEP;
snake = (GRID *)realloc(snake,MAX_LENGTH * sizeof(GRID));
}//若蛇的长度数组snake将超过所分配的内存就再次扩充分配
if(snake->x < 0 || snake->x >= LENGTH || snake->y < 0 || snake->y >= LENGTH)
{
MessageBox(NULL,TEXT("Game Over!!"),szAppName,0);
initializer();
return;
}///判断蛇是否碰到边界
for(int i = 4;i < snake_len;++i)
{
if(snake->x == (snake + i)->x && snake->y == (snake + i)->y)
{
MessageBox(NULL,TEXT("Game Over!!"),szAppName,0);
initializer();
return;
}
}////判断蛇是否碰到自身
if(food->x == snake->x && food->y == snake->y)
{
MakePartSnake(
(snake + snake_len - 1)->x
,(snake + snake_len - 1)->y
,HAS_SNAKE
,snake + snake_len
);
++snake_len;
MakeFood(food);
}///判断蛇是否吃到food
}
////////////////////////////////////////////////////////////////////////////////
H. java代码,为什么我写的这个游戏编译不通过
代码没看出毛病,你用的什么编译器,建议换个编译器吧!
I. 猜数游戏的C语言编译代码
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <string.h>
time_t t;
int a[4];
char q[5]="1234";
void youxizuorenjieshao()
{
void zhuye();
system("cls");
printf("\n\n\n");
printf(" 游戏制作人介绍\n");
printf(" 姓名 :蔡砚刚\n");
printf(" 年龄 :18\n");
printf(" 性别 :男\n");
printf(" 出生年月(阳历):1989年12月4日\n");
printf(" 出生年月(阴历):1989年十一月初七\n");
printf(" 学校 :浙江工商大学\n");
printf(" 毕业学校 :安丘八中\n");
printf(" 出生地 :山东潍坊安丘\n");
printf(" 班级 :软件0701\n");
printf(" 院系 :计算机与信息工程学院\n");
printf(" 寝室 :钱江湾生活区41#518\n");
printf(" 电话 :15858263646\n");
printf(" 这就是对菜鸟的介绍:你想评价一下他的游戏么?\n");
printf(" 返回主菜单按任意键:");
getchar();getchar();
zhuye();
}
void youxiguize()
{
void zhuye();
system("cls");
printf("\n\n\n\n");
printf(" 游戏介绍:\n");
printf(" 1输入一个各位上数字互不相等的四位数\n");
printf(" 2如果你输入的数字中有n个相同的数字返回nA\n");
printf(" 3如果你输入的数字中有m个相同且位置相同返回mB\n");
printf(" 4当返回值是4A4B时即为猜中数字\n");
printf(" 5还可以提前偷窥数字但要输入密码\n");
printf(" 现在你已知道游戏规则,那么赶快玩魅力小菜猜数字游戏吧!\n");
printf(" 按任意键返回主采单:");
getchar();getchar();
zhuye();
}
void suijishu()
{
a[0]=rand() %10;
while(1){
a[1]=rand()%10;
if(a[1]!=a[0]) break;
}
while(1){
a[2]=rand()%10;
if((a[2]!=a[0])&&(a[2]!=a[1])) break;
}
while(2){
a[3]=rand()%10;
if((a[3]!=a[0])&&(a[3]!=a[1])&&(a[3]!=a[2])) break;
}
}
void xiaofanhui()
{
int n;
void panan();
void youxi();
void zhuye();
system("cls");
printf("\n\n\n\n\n\n\n\n");
printf(" 现在你已经成功完成游戏\n");
printf(" 按1继续游戏\n");
printf(" 按2返回主菜单\n");
printf(" 按3返回上一级\n");
printf(" 请选择:");
scanf("%d",&n);
switch(n){
case 1:suijishu();printf(" 请输入所猜数字:");
panan();break;
case 2:zhuye();break;
case 3:youxi();break;
default:system("cls");printf(" 这个功能码不正确\n");break;
}
}
void panan()
{
long n;
int i,j,k,l;
char b[5];
j=0;l=0;
scanf("%s",b);
for(i=0;i<4;i++)
b[i]=b[i]-'0';
for(i=0;i<4;i++) {
if(a[i]==b[i]) j++;
for(k=0;k<4;k++)
if(a[i]==b[k]){ l++;break;}
}
if((j==4)&&(l==4)){
printf(" 4A4B\n");
printf(" 恭喜你,干的不错,想记入排行榜么?");
for(n=1;n<=300000000;n++);
xiaofanhui();
}
else{
printf(" %dA%dB",l,j);
printf("请输入所猜数字:");
panan();
}
}
void print()
{
printf("\n\n\n\n\n\n\n");
printf(" 魅力小菜猜数字游戏现在开始\n");
printf(" 你做好准备了么?\n");
printf(" 如果你用最少的次数猜中的话,还有望进入小菜排行榜呢\n");
printf(" 请输入所猜数字:");panan();
}
void mima()
{
int i,j;
char p[5];
void youxi();
system("cls");
printf("\n\n\n\n\n\n\n\n");
printf(" 你可真偷懒!偷懒需要密码吆!你知道密码么?\n");
printf(" 请输入密码:");
for(i=1;i<3;i++){
scanf("%s",p);
if(strcmp(p,q)==0){ system("cls"); printf("偷窥答案是:%d%d%d%d\n",a[0],a[1],a[2],a[3]);print();}
else{ printf(" 密码错误\n");
printf(" 请输入密码:");
}
}
scanf("%s",p);
if(strcmp(p,q)==0){ system("cls"); printf("偷窥答案是:%d%d%d%d\n",a[0],a[1],a[2],a[3]);print();}
else printf(" 密码错误\n");
printf(" 你已输入3次密码还错误,看来偷鸡不成蚀把米\n");
printf(" 还是本分点玩游戏吧:");
for(j=1;j<=500000000;j++);
youxi();
}
void youxi()
{
int m;
system("cls");
suijishu();
printf("\n\n\n\n\n\n\n\n");
printf(" 魅力无限的猜数字游戏现在开始:\n");
printf(" 按1现在开始游戏\n");
printf(" 按2提前偷窥(需要4位密码吆)\n");
printf(" 请输入:");
scanf("%d",&m);
switch(m){
case 1:system("cls");print();panan();break;
case 2:mima();break;
}
}
void paihang()
{
char ch;
FILE *fp;
void zhuye();
if((fp=fopen("paihangbang.txt","r"))==NULL){
printf("无信息\n");
}
while(!feof(fp)){
ch=fgetc(fp);
putchar(ch);
}
if(fclose(fp)){
printf("不能关闭文件\n");
}
printf("\n看到了吧,你想成为其中一员吗?赶快来玩吧!小菜给你无限惊喜!返回主菜单请按任意键");
getchar();getchar();
zhuye();
}
void zhuyexuanze()
{
int n;
long i;
void zhuye();
scanf("%d",&n);
switch(n){
case 1:youxi();break;
case 2:system("cls"); paihang();break;
case 3:youxiguize();break;
case 4:youxizuorenjieshao();break;
case 5:break;
default:printf(" 您输入的功能码有误,请重新输入:\n");
for(i=1;i<=300000000;i++);
system("cls"); zhuye();
}
}
void zhuye()
{
system("cls");
printf("$$$$$$$哈!哈!累了吧,无聊了吧!玩一下小菜猜数字游戏八!¥¥¥¥¥¥¥¥\n");
printf(" 制作人:蔡砚刚");
printf("\n\n\n");
printf(" 小菜猜数字\n\n\n");
printf(" 下面玩一下吧!\n");
printf(" 按下以下数字选择你所要的功能:\n");
printf(" 1开始游戏\n");
printf(" 2查看排行榜\n");
printf(" 3游戏规则介绍\n");
printf(" 4制作人介绍\n");
printf(" 5退出游戏\n\n\n\n\n");
printf(" 请输入你所要选择的功能:");
zhuyexuanze();
}
main()
{
srand((unsigned) time(&t));
zhuye();