黑客24小时接单的黑客网站

黑客接单的网站,黑客网站,黑客技术,破解密码,破解技术

编程一个最简单游戏代码贪吃蛇(编程贪吃蛇怎么做)

本文目录一览:

贪吃蛇编程

这里有我以前敲过的贪吃蛇,不介意可以参考一下,(ps:需要建一了application而不是console application)

#include windows.h

#include stdio.h

#include tchar.h

#include time.h

#define speed 200

#define left 100

#define top 50

#define right 500

#define bottom 350

struct snake

{

POINT pos;

snake *front,*next;

};

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

bool InitWindow(HINSTANCE,int);

void items(HDC,int,int);

void MoveSnake(int);

void remove();

void destroy();

void inf(int,int,int,int);

void inf(const char*,int,int,int,int);

void inf(const char*,int,int,int);

bool is_fail();

void eat();

void wall();

void show_fruit();

UINT ShowMode;

PAINTSTRUCT ps;

bool onoff;

HFONT hf;

char judge[20];

int dir;

HDC hdc;

HWND hwnd;

HBRUSH BlackBrush,MainBrush,NULLBrush;

HPEN MainPen,BlackPen;

snake *head,*tail,*temp;

POINT fruit;

int WINAPI WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow

)

{

onoff=1;

int i;

dir=-2;

tail=NULL;

InitWindow(hInstance,nCmdShow);

for(i=0;i5;i++)

{

if(!tail)

{

head=new snake;

tail=head;

head-pos.x=300+i*10;

head-pos.y=200;

items(hdc,head-pos.x,head-pos.y);

}

else

{

tail-next=new snake;

tail-next-front=tail;

tail=tail-next;

tail-pos.x=300+i*10;

tail-pos.y=200;

tail-next=NULL;

items(hdc,tail-pos.x,tail-pos.y);

}

}

hf=CreateFont(20,0,0,0,400,0,0,0,GB2312_CHARSET,

OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,"华文行楷");

SelectObject(hdc,hf);

SetBkColor(hdc,RGB(124,146,131));

SelectObject(hdc,MainBrush);

wall();

show_fruit();

inf("得分:",260,0,0);

MSG msg;

while(GetMessage(msg,NULL,0,0))

{

TranslateMessage(msg);

DispatchMessage(msg);

}

destroy();

return 0;

}

LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)

{

static int seed=15;

switch(msg)

{

case WM_TIMER:

MoveSnake(dir);

if(!is_fail())

{

KillTimer(hwnd,1);

MessageBox(hwnd,"you are lost","caption",0);

}

eat();

break;

case WM_PAINT:

hdc=BeginPaint(hwnd,ps);

wall();

EndPaint(hwnd,ps);

hdc=GetDC(hwnd);

case WM_KEYDOWN:

switch(wParam)

{

case VK_UP:dir=(dir!=1?-1:dir);break;

case VK_DOWN:dir=(dir!=-1?1:dir);break;

case VK_RIGHT:dir=(dir!=-2?2:dir);break;

case VK_LEFT:dir=(dir!=2?-2:dir);break;

}

break;

case WM_CLOSE:

if(MessageBox(hwnd,"确定退出?","caption",MB_YESNO)==IDYES)

DestroyWindow(hwnd);

break;

case WM_DESTROY:

ReleaseDC(hwnd,hdc);

KillTimer(hwnd,1);

PostQuitMessage(0);

break;

default:return DefWindowProc(hwnd,msg,wParam,lParam);

}

return 1;

}

bool InitWindow(HINSTANCE hInstance,int nCmdShow)

{

WNDCLASS wc;

wc.style=CS_HREDRAW | CS_VREDRAW;

wc.lpszClassName="test";

wc.lpszMenuName=NULL;

wc.cbClsExtra=0;

wc.cbWndExtra=0;

wc.hbrBackground=CreateSolidBrush(RGB(124,146,131));

wc.hIcon=NULL;

wc.hCursor=LoadCursor(NULL,IDC_ARROW);

wc.hInstance=hInstance;

wc.lpfnWndProc=WndProc;

MainBrush=CreateSolidBrush(RGB(124,146,131));

BlackBrush=(HBRUSH)GetStockObject(BLACK_BRUSH);

NULLBrush=(HBRUSH)GetStockObject(NULL_BRUSH);

MainPen=CreatePen(PS_SOLID,1,RGB(124,146,131));

BlackPen=CreatePen(PS_SOLID,1,RGB(0,0,0));

if(!RegisterClass(wc)) return false;

hwnd=CreateWindow("test","贪吃蛇",WS_SYSMENU,400,150,616,400,NULL,NULL,hInstance,NULL);

hdc=BeginPaint(hwnd,ps);

if(!hwnd) return false;

ShowWindow(hwnd,SW_SHOWNORMAL);

UpdateWindow(hwnd);

SetTimer(hwnd,1,speed,NULL);

return true;

}

void items(HDC hdc,int x,int y)

{

SelectObject(hdc,BlackPen);

SelectObject(hdc,NULLBrush);

Rectangle(hdc,x,y,x+10,y+10);

SelectObject(hdc,BlackBrush);

Rectangle(hdc,x+2,y+2,x+8,y+8);

// DeleteObject(BlackPen);

// DeleteObject(BlackBrush);

}

void MoveSnake(int dir)

{

static int i=0;

remove();

tail=tail-front;

delete tail-next;

tail-next=NULL;

temp=new snake;

temp-next=head;

head-front=temp;

temp-pos.x=head-pos.x+(dir/2)*10;

temp-pos.y=head-pos.y+(dir%2)*10;

head=temp;

i++;

items(hdc,head-pos.x,head-pos.y);

}

void remove()

{

SelectObject(hdc,MainBrush);

SelectObject(hdc,MainPen);

Rectangle(hdc,tail-pos.x,tail-pos.y,tail-pos.x+10,tail-pos.y+10);

// DeleteObject(MainBrush);

// DeleteObject(MainPen);

}

void destroy()

{

while(head-next)

{

head=head-next;

delete head-front;

}

delete tail;

}

void inf(int x,int y,int px,int py)

{

inf("",x,y,px,py);

}

void inf(const char*str,int x,int y,int scores)

{

sprintf(judge,"%s%d",str,scores);

TextOut(hdc,x,y,judge,strlen(judge));

}

void inf(const char*str,int x,int y,int px,int py)

{

sprintf(judge,"%s(%d,%d) ",str,px,py);

TextOut(hdc,x,y,judge,strlen(judge));

}

bool is_fail()

{

temp=head;

int px=head-pos.x,py=head-pos.y;

if(pxleft||px=right||pytop||py=bottom)

return 0;

while(temp-next)

{

temp=temp-next;

if(px==temp-pos.xpy==temp-pos.y)

return 0;

}

return 1;

}

void show_fruit()

{

srand((UINT)time(NULL));

fruit.x=10*((rand()%(right-left-10))/10)+left;

fruit.y=10*((rand()%(bottom-top-10))/10)+top;

items(hdc,fruit.x,fruit.y);

}

void eat()

{

inf("食物:",0,25,fruit.x,fruit.y);

inf("蛇头:",0,0,head-pos.x,head-pos.y);

static int scores=0;

if(head-pos.x==fruit.xhead-pos.y==fruit.y)

{

scores++;

inf("得分:",260,0,scores);

KillTimer(hwnd,1);

temp=new snake;

temp-next=head;

head-front=temp;

temp-pos.x=head-pos.x+(dir/2)*10;

temp-pos.y=head-pos.y+(dir%2)*10;

head=temp;

items(hdc,head-pos.x,head-pos.y);

SetTimer(hwnd,1,speed,NULL);

show_fruit();

}

}

void wall()

{

SelectObject(hdc,MainBrush);

Rectangle(hdc,left-1,top-1,right+1,bottom+1);

// DeleteObject(MainBrush);

}

求java贪吃蛇的编程,并有注释

J2ME贪吃蛇源代码——200行左右,包含详细注释 package snake;import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;public class SnakeMIDlet extends MIDlet {

SnakeCanvas displayable = new SnakeCanvas();

public SnakeMIDlet() {

Display.getDisplay(this).setCurrent(displayable);

}public void startApp() {}public void pauseApp() {}public void destroyApp(boolean unconditional) {}}//文件名:SnakeCanvas.javapackage snake;import java.util.*;

import javax.microedition.lcdui.*;/**

* 贪吃蛇游戏

*/

public class SnakeCanvas extends Canvas implements Runnable{

/**存储贪吃蛇节点坐标,其中第二维下标为0的代表x坐标,第二维下标是1的代表y坐标*/

int[][] snake = new int[200][2];

/**已经使用的节点数量*/

int snakeNum;

/**贪吃蛇运动方向,0代表向上,1代表向下,2代表向左,3代表向右*/

int direction;

/*移动方向*/

/**向上*/

private final int DIRECTION_UP = 0;

/**向下*/

private final int DIRECTION_DOWN = 1;

/**向左*/

private final int DIRECTION_LEFT = 2;

/**向右*/

private final int DIRECTION_RIGHT = 3;/**游戏区域宽度*/

int width;

/**游戏区域高度*/

int height;/**蛇身单元宽度*/

private final byte SNAKEWIDTH = 4;/**是否处于暂停状态,true代表暂停*/

boolean isPaused = false;

/**是否处于运行状态,true代表运行*/

boolean isRun = true;/**时间间隔*/

private final int SLEEP_TIME = 300;

/**食物的X坐标*/

int foodX;

/**食物的Y坐标*/

int foodY;

/**食物的闪烁控制*/

boolean b = true;

/**Random对象*/

Random random = new Random();

public SnakeCanvas() {

//初始化

init();

width = this.getWidth();

height = this.getHeight();

//启动线程

new Thread(this).start();

}/**

* 初始化开始数据

*/

private void init(){

//初始化节点数量

snakeNum = 7;

//初始化节点数据

for(int i = 0;i snakeNum;i++){

snake[i][0] = 100 - SNAKEWIDTH * i;

snake[i][1] = 40;

}

//初始化移动方向

direction = DIRECTION_RIGHT;

//初始化食物坐标

foodX = 100;

foodY = 100;

}protected void paint(Graphics g) {

//清屏

g.setColor(0xffffff);

g.fillRect(0,0,width,height);

g.setColor(0);//绘制蛇身

for(int i = 0;i snakeNum;i++){

g.fillRect(snake[i][0],snake[i][1],SNAKEWIDTH,SNAKEWIDTH);

}

//绘制食物

if(b){

g.fillRect(foodX,foodY,SNAKEWIDTH,SNAKEWIDTH);

}

}private void move(int direction){

//蛇身移动

for(int i = snakeNum - 1;i 0;i--){

snake[i][0] = snake[i - 1][0];

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

}//第一个单元格移动

switch(direction){

case DIRECTION_UP:

snake[0][1] = snake[0][1] - SNAKEWIDTH;

break;

case DIRECTION_DOWN:

snake[0][1] = snake[0][1] + SNAKEWIDTH;

break;

case DIRECTION_LEFT:

snake[0][0] = snake[0][0] - SNAKEWIDTH;

break;

case DIRECTION_RIGHT:

snake[0][0] = snake[0][0] + SNAKEWIDTH;

break;

}

}

/**

* 吃掉食物,自身增长

*/

private void eatFood(){

//判别蛇头是否和食物重叠

if(snake[0][0] == foodX snake[0][1] == foodY){

snakeNum++;

generateFood();

}

}

/**

* 产生食物

* 说明:食物的坐标必须位于屏幕内,且不能和蛇身重合

*/

private void generateFood(){

while(true){

foodX = Math.abs(random.nextInt() % (width - SNAKEWIDTH + 1))

/ SNAKEWIDTH * SNAKEWIDTH;

foodY = Math.abs(random.nextInt() % (height - SNAKEWIDTH + 1))

/ SNAKEWIDTH * SNAKEWIDTH;

boolean b = true;

for(int i = 0;i snakeNum;i++){

if(foodX == snake[i][0] snake[i][1] == foodY){

b = false;

break;

}

}

if(b){

break;

}

}

}

/**

* 判断游戏是否结束

* 结束条件:

* 1、蛇头超出边界

* 2、蛇头碰到自身

*/

private boolean isGameOver(){

//边界判别

if(snake[0][0] 0 || snake[0][0] (width - SNAKEWIDTH) ||

snake[0][1] 0 || snake[0][1] (height - SNAKEWIDTH)){

return true;

}

//碰到自身

for(int i = 4;i snakeNum;i++){

if(snake[0][0] == snake[i][0]

snake[0][1] == snake[i][1]){

return true;

}

}

return false;

}/**

* 事件处理

*/

public void keyPressed(int keyCode){

int action = this.getGameAction(keyCode);

//改变方向

switch(action){

case UP:

if(direction != DIRECTION_DOWN){

direction = DIRECTION_UP;

}

break;

case DOWN:

if(direction != DIRECTION_UP){

direction = DIRECTION_DOWN;

}

break;

case LEFT:

if(direction != DIRECTION_RIGHT){

direction = DIRECTION_LEFT;

}

break;

case RIGHT:

if(direction != DIRECTION_LEFT){

direction = DIRECTION_RIGHT;

}

break;

case FIRE:

//暂停和继续

isPaused = !isPaused;

break;

}

}/**

* 线程方法

* 使用精确延时

*/

public void run(){

try{

while (isRun) {

//开始时间

long start = System.currentTimeMillis();

if(!isPaused){

//吃食物

eatFood();

//移动

move(direction);

//结束游戏

if(isGameOver()){

break;

}

//控制闪烁

b = !b;

}

//重新绘制

repaint();

long end = System.currentTimeMillis();

//延时

if(end - start SLEEP_TIME){

Thread.sleep(SLEEP_TIME - (end - start));

}

}

}catch(Exception e){}

}

}

如何自己编程小游戏?

使用类编程思路清晰,可读性强,本例通过编写贪吃蛇展示类的基本应用。最终效果如下:

网页教学网:本文中全部的Fla源码在文章最后全部打包供大家下载研究学习使用。

看不懂链接名等内容的,可以看我的另一个教程“ 简单射击游戏教程 ”,或许有所帮助。全部源文件如下:贪吃蛇—类编程.rar

第一步:“蛇”类初始化

  新建fla文件,同目录下新建as文件,取名Snake.as,类名必须和文件名相同。fla文件中新建蛇节点元件,链接名为node,第一帧和类中写入相应代码。

第一步:“蛇”类初始化.rar

第二步:蛇的移动

写个move方法,在init方法中设置时间间隔。

第二步:蛇的移动.rar

第三步: 键盘改变移动方向

写个changeDirection方法,在主场景第一帧用键盘事件调用该方法,控制蛇的方向。

第三步:键盘改变移动方向.rar

第四步:增加节点

写个addNode方法,新节点产生在蛇尾即nodes[length - 1]的位置上,暂时加个按钮调用addNode方法,观察结果。

第四步:增加节点.rar

第五步:碰撞判断

修改move方法,假如头节点与蛇身其他部位重合,clearInterval删除move的定时调用。同时changeDirection也要加多个判断,不能让头节点和第二节点重合,加多这个判断是为了防止一个Bug的产生,一些贪吃蛇程序并没有注意到这点。这个Bug产生原因如下:

假设蛇向右移动,是不能进行向左改变方向,但由于move方法是定时调用的,比如每300毫秒一次,所以在这300毫秒内可能进行了多次快速按键。第一次按向下,蛇的xDirection和yDirection改变为向下,但move的执行时间没到,又紧接着按左,因为蛇方向在数据上已经改变,所以捕捉不到不能向左的判断,快速按键造成蛇反向移动的Bug就产生了,加个上述判断就好了。

第五步:碰撞判断.rar

第六步:食物类编写

新建Food类,注意用extends继承MovieClip,这样元件才能链接它,在主场景中新建食物元件,链接Food类,实例名为food,拖入场景。在Food中写入appear和disappear方法,做两个临时按键调用它们观察效果。

第六步:食物类编写.rar

最终完成:吃食物

Food中定时调用appear,并通过setSnake引入Snake实例snake,判断蛇身坐标不让新食物与之重合。Snake中通过setFood引入Food实例food,判断是否吃到食物,做出相应处理,如食物消失,增加蛇节点,改变setSnake。场景第一帧也要setSnake引入蛇头。

以后还要增加新功能,如阻碍物设置等,都可以通过改变as文件完成。虽然类编程比直接控制影片较为繁琐,但由于使用了面向对象,以后再对程序进行完善时都可依照对象行为思考,每个方法就是对象的每个行为,什么行为需要改变就找对应的方法修改,思路清晰。

c++编程小游戏代码

以下是贪吃蛇源代码:

 

#includeiostream.h

#includewindows.h

#includetime.h

#includestdlib.h

#includeconio.h

#define N 21

void gotoxy(int x,int y)//位置函数{

COORD pos;

pos.X=2*x;

pos.Y=y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);

}

void color(int a)//颜色函数{

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);

}

void init(int apple[2])//初始化函数(初始化围墙、显示信息、苹果)

{

int i,j;//初始化围墙

int wall[N+2][N+2]={{0}};

for(i=1;i=N;i++)

{

for(j=1;j=N;j++)

wall[i][j]=1;

}

color(11);

for(i=0;iN+2;i++)

{

for(j=0;jN+2;j++)

{

if(wall[i][j])

cout"■";

else cout"□" ;

}

coutendl;

}

gotoxy(N+3,1);//显示信息

color(20);

cout"按 W S A D 移动方向"endl;

gotoxy(N+3,2);

color(20);

cout"按任意键暂停"endl;

gotoxy(N+3,3);

color(20);

cout"得分:"endl;

apple[0]=rand()%N+1;//苹果

apple[1]=rand()%N+1;

gotoxy(apple[0],apple[1]);

color(12);

cout"●"endl;

}

int main()

{

int i,j;

int** snake=NULL;

int apple[2];

int score=0;

int tail[2];

int len=3;

char ch='p';

srand((unsigned)time(NULL));

init(apple);

snake=(int**)realloc(snake,sizeof(int*)*len);

for(i=0;ilen;i++)

snake[i]=(int*)malloc(sizeof(int)*2);

for(i=0;ilen;i++)

{

snake[i][0]=N/2;

snake[i][1]=N/2+i;

gotoxy(snake[i][0],snake[i][1]);

color(14);

cout"★"endl;

}

while(1)//进入消息循环

{

tail[0]=snake[len-1][0];

tail[1]=snake[len-1][1];

gotoxy(tail[0],tail[1]);

color(11);

cout"■"endl;

for(i=len-1;i0;i--)

{

snake[i][0]=snake[i-1][0];

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

gotoxy(snake[i][0],snake[i][1]);

color(14);

cout"★"endl;

}

if(kbhit())

{

gotoxy(0,N+2);

ch=getche();

}

switch(ch)

{

case 'w':snake[0][1]--;break;

case 's':snake[0][1]++;break;

case 'a':snake[0][0]--;break;

case 'd':snake[0][0]++;break;

default: break;

}

gotoxy(snake[0][0],snake[0][1]);

color(14);

cout"★"endl;

Sleep(abs(200-0.5*score));

if(snake[0][0]==apple[0]snake[0][1]==apple[1])//吃掉苹果后蛇分数加1,蛇长加1

{

score++;

len++;

snake=(int**)realloc(snake,sizeof(int*)*len);

snake[len-1]=(int*)malloc(sizeof(int)*2);

apple[0]=rand()%N+1;

apple[1]=rand()%N+1;

gotoxy(apple[0],apple[1]);

color(12);

cout"●"endl;

gotoxy(N+5,3);

color(20);

coutscoreendl;

}

if(snake[0][1]==0||snake[0][1]==N||snake[0][0]==0||snake[0][0]==N)//撞到围墙后失败

{

gotoxy(N/2,N/2);

color(30);

cout"失败!!!"endl;

for(i=0;ilen;i++)

free(snake[i]);

Sleep(INFINITE);

exit(0);

}

}

return 0;

}

  • 评论列表:
  •  性许痴妓
     发布于 2023-03-22 04:04:29  回复该评论
  • nt seed=15; switch(msg) { case WM_TIMER: MoveSnake(dir); if(!is_fail())
  •  断渊饮惑
     发布于 2023-03-22 05:14:18  回复该评论
  • E){Thread.sleep(SLEEP_TIME - (end - start));}}}catch(Exception e){}}}如何自己编程小游戏?使用类编程思路清晰,可读性强,本例通过编写贪吃蛇展示类的基本应用。最终效果如下:网页教学网:本文中全部的Fla源码在文章

发表评论:

Powered By

Copyright Your WebSite.Some Rights Reserved.