求Java 大神给个可以在eclipse上运行的贪吃蛇源代码在线等急

求Java 大神给个可以在eclipse上运行的贪吃蛇源代码在线等急,第1张

packagecomtarenaeltstest;importjavaawtColor;importjavaawtFont;importjavaawtPoint;importjavaawteventActionEvent;importjavaawteventActionListener;importjavaawteventKeyAdapter;importjavaawteventKeyEvent;importjavautilArrayList;importjavautilHashMap;importjavautilHashSet;importjavautilList;importjavautilMap;importjavautilRandom;importjavautilSet;importjavaxswingJButton;importjavaxswingJFrame;importjavaxswingJLabel;importjavaxswingJPanel;publicclassWormFrameextendsJFrame{privatestaticfinallongserialVersionUID=1L;publicstaticfinalintUP=-10;publicstaticfinalintDOWN=10;publicstaticfinalintLEFT=-200;publicstaticfinalintRIGHT=200;privateintspeed=200;//蛇的移动速度,越小越快privateJPaneljPanel=null;//游戏面板privateJLabeljLabel=null;//显示游戏结束的标签privateJButtonreset=null;//从新开始游戏的按钮privateJButtoncontrol=null;//控制方向的按钮privateListworm=newArrayList();//贪吃蛇//将整个面板划分成节点,蛇走到那里,就那整个节点点亮privateMapnodes=newHashMap();privateintdir=LEFT;//方向privatePointfood;//食物privatebooleanisContinue=false;//判断蛇是否行动的标记publicstaticvoidmain(String[]args){newWormFrame();}publicWormFrame(){initialize();start();}//游戏初始化privatevoidinitialize(){thissetSize(500,500);thissetLocation(250,100);thissetResizable(false);thisadd(getJPanel());//添加面板thissetTitle("贪吃蛇,空格键暂停,回车开始");thissetVisible(true);}//游戏开始privatevoidstart(){isContinue=true;while(true){while(isContinue){try{Pointp=wormget(0);intx=(int)pgetX()+dir/20;inty=(int)pgetY()+dir%100;if(foodequals(newPoint(x,y))){wormadd(0,food);if(wormsize()%1==0){speed-=10;}getFood();continue;}p=newPoint(x,y);if(wormcontains(p)){thrownewException();}nodesget(p)setVisible(false);wormadd(0,p);nodesget(wormremove(wormsize()-1))setVisible(true);Threadsleep(speed);}catch(Exceptione){jLabelsetVisible(true);resetsetVisible(true);//不停止内循环,jLabel和reset不消失isContinue=false;}}try{Threadsleep(1000);}catch(InterruptedExceptione){eprintStackTrace();}}}//游戏从新开始privatevoidreset(){worm=newArrayList();for(Pointp:nodeskeySet()){nodesget(p)setVisible(false);}addWorm();dir=LEFT;getFood();isContinue=true;}//获取游戏面板的方法,面板中有记录游戏时间的标签,//代表游戏角色的按钮和重新开始游戏的按钮privateJPanelgetJPanel(){if(jPanel==null){//显示游戏结束的标签getOver();//从新开始的按钮getReset();//控制按钮getControl();//游戏面板jPanel=newJPanel();jPanelsetLayout(null);//设置面板布局为空//jPanelsetForeground(newColor(255,255,255));//设置面板前景色jPanelsetBackground(newColor(0,0,0));//设置面板背景色jPaneladd(jLabel,null);//面板中添加显示游戏结束的标签jPaneladd(reset,null);//面板中添加从新开始的按钮jPaneladd(control,null);for(inti=0;i<490;i+=10){for(intj=0;j<470;j+=10){JButtonjb=newJButton();Pointp=newPoint(i,j);jbsetBounds(i,j,10,10);jbsetBackground(newColor(255,255,255));jbsetEnabled(false);//jbsetVisible(true);nodesput(p,jb);jPaneladd(jb,null);}}addWorm();//添加一条蛇getFood();//食物按钮jPanelsetVisible(true);//设置面板可见}returnjPanel;}//游戏结束标签privatevoidgetOver(){jLabel=newJLabel();jLabelsetBounds(170,200,200,50);//设置标签大小和位置jLabelsetFont(newFont("Dialog",FontBOLD,24));//设置标签字体jLabelsetForeground(newColor(250,2,2));//设置标签前景颜色jLabelsetText("游戏结束");jLabelsetEnabled(true);//设置此标签可用jLabelsetVisible(false);//设置此标签不可见}//从新开始按钮privatevoidgetReset(){if(reset==null){reset=newJButton();//新建一个按钮resetsetBounds(170,300,164,51);//设置按钮的大小resetsetText("重新开始");//设置按钮的内容resetsetVisible(false);//设置按钮不可见//添加按钮的时间监听器resetaddActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){resetsetVisible(false);//点击重新开始按钮后,按钮消失jLabelsetVisible(false);//记录游戏时间的按钮也消失try{Threadsleep(1000);}catch(InterruptedExceptione1){e1printStackTrace();}reset();}});}}//控制方向的按钮privatevoidgetControl(){if(control==null){control=newJButton();controladdKeyListener(newKeyAdapter(){@OverridepublicvoidkeyPressed(KeyEvente){switch(egetKeyCode()){caseKeyEventVK_LEFT:chDir(LEFT);break;caseKeyEventVK_RIGHT:chDir(RIGHT);break;caseKeyEventVK_UP:chDir(UP);break;caseKeyEventVK_DOWN:chDir(DOWN);break;caseKeyEventVK_ENTER:isContinue=true;break;caseKeyEventVK_SPACE:isContinue=false;break;}}});}}//生成食物privatevoidgetFood(){Randomran=newRandom();//横坐标最大480,纵坐标最大460intx=rannextInt(49)10;inty=rannextInt(47)10;food=newPoint(x,y);Setset=newHashSet(worm);while(setcontains(food)){x=rannextInt(50)10;y=rannextInt(50)10;food=newPoint(x,y);}nodesget(food)setVisible(false);}//改变方向privatevoidchDir(intdir){if(thisdir+dir!=0){thisdir=dir;}}//添加Worm的方法privatevoidaddWorm(){for(inti=250;i<300;i+=10){Pointp=newPoint(i,250);wormadd(p);nodesget(p)setVisible(true);}}}//给分

我实现一个,请笑纳~

值得注意的是,要将EGAVGABGI文件拷到和这个源程序同一个目录下才能正常显示。

EGAVGABGI在C语言软件的安装目录下,你可以在该文件夹搜索找到!

#include "stdioh"

#include "graphicsh"

#include "stdlibh"

#include "dosh"

#define N 200

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

}snake;

void Init();

void DrawK();

void GamePlay();

void GameOver();

void PrScore();

void Close();

void main()

{

Init();/图形界面驱动/

DrawK();/作围墙/

GamePlay();

Close();

}

/图形界面驱动模块/

void Init()

{

int gd=DETECT,gm;

initgraph(&gd,&gm,"");

}

/作矩形围墙/

void DrawK()

{

setcolor(11);

setlinestyle(0,0,3);

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

}

getch();

}

void GamePlay()

{

randomize();

/初始状态/

foodyes=1;

snakelife=0;

snakedirection=1;

snakex[0]=100;

snakey[0]=100;

snakex[1]=110;

snakey[1]=100;

snakenode=2;

PrScore();

/重复玩游戏模块/

while(1)

{

/没有按键情况下蛇的运动/

while(!kbhit())

{

/食物的出现/

if(foodyes==1)

{

foodx=rand()%400+60;

foody=rand()%350+60;

/将食物出现位置控制在整格/

while(foodx%10!=0)

foodx++;

while(foody%10!=0)

foody++;

foodyes=0;/食物位置控制好了就改变状态/

}

/显示食物/

if(foodyes==0)

{

setcolor(GREEN);

rectangle(foodx,foody,foodx+10,foody-10);

}

/蛇的位置变化/

for(i=snakenode-1;i>0;i--)

{

snakex[i]=snakex[i-1];

snakey[i]=snakey[i-1];

}

/按方向键时蛇的位置变化/

switch(snakedirection)

{

case 1:snakex[0]+=10;break;

case 2:snakex[0]-=10;break;

case 3:snakey[0]-=10;break;

case 4:snakey[0]+=10;break;

}

/蛇自己与自己相撞时生命结束/

for(i=3;i<snakenode;i++)

{

if(snakex[i]==snakex[0]&&snakey[0]==snakey[i])

{

GameOver();

snakelife=1;

break;

}

}

/蛇撞墙时死亡/

if(snakex[0]<55||snakex[0]>595||snakey[0]<55||snakey[0]>455)

{

GameOver();

snakelife=1;

}

/蛇的生命状态判断/

if(snakelife==1)

break;

/蛇吃食物/

if(snakex[0]==foodx&&snakey[0]==foody)

{

setcolor(0);

rectangle(foodx,foody,foodx+=10,foody-=10);

snakex[snakenode]=-20;

snakey[snakenode]=-20;

snakenode++;

foodyes=1;

score+=10;

PrScore();

}

/画蛇/

setcolor(4);

for(i=0;i<snakenode;i++)

rectangle(snakex[i],snakey[i],snakex[i]+10,snakey[i]-10);

delay(gamespeed);

/去除最后一节/

setcolor(0);

rectangle(snakex[snakenode-1],snakey[snakenode-1],snakex[snakenode-1]+10,snakey[snakenode-1]-10);

}/end while(!kbhit())/

if(snakelife==1)

break;

key=bioskey(0);

if(key==Esc)

break;

else if(key==UP&&snakedirection!=4)

snakedirection=3;

else if(key==RIGHT&&snakedirection!=2)

snakedirection=1;

else if(key==LEFT&&snakedirection!=1)

snakedirection=2;

else if(key==DOWN&&snakedirection!=3)

snakedirection=4;

}/endwhile(1)/

}

//游戏结束

void GameOver()

{

cleardevice();

PrScore();

setcolor(RED);

settextstyle(0,0,4);

outtextxy(200,200,"GAME OVER");

getch();

}

/打印分数/

void PrScore()

{

char str[10];

setfillstyle(1,14);

bar(50,15,220,35);

setcolor(6);

settextstyle(0,0,2);

sprintf(str,"score:%d",score);

outtextxy(55,20,str);

}

/图形结束/

void Close()

{

getch();

closegraph();

}

用MVC方式实现的贪吃蛇游戏,共有4个类。运行GreedSnake运行即可。主要是观察者模式的使用,我已经添加了很多注释了。

1、

/

程序名称:贪食蛇

原作者:BigF

修改者:algo

说明:我以前也用C写过这个程序,现在看到BigF用Java写的这个,发现虽然作者自称是Java的初学者,

但是明显编写程序的素养不错,程序结构写得很清晰,有些细微得地方也写得很简洁,一时兴起之

下,我认真解读了这个程序,发现数据和表现分开得很好,而我近日正在学习MVC设计模式,

因此尝试把程序得结构改了一下,用MVC模式来实现,对源程序得改动不多。

我同时也为程序增加了一些自己理解得注释,希望对大家阅读有帮助。

/

package mvcTest;

/

@author WangYu

@version 10

Description:

</pre>

Create on :Date :2005-6-13 Time:15:57:16

LastModified:

History:

/

public class GreedSnake {

public static void main(String[] args) {

SnakeModel model = new SnakeModel(20,30);

SnakeControl control = new SnakeControl(model);

SnakeView view = new SnakeView(model,control);

//添加一个观察者,让view成为model的观察者

modeladdObserver(view);

(new Thread(model))start();

}

}

-------------------------------------------------------------

2、

package mvcTest;

//SnakeControljava

import javaawteventKeyEvent;

import javaawteventKeyListener;

/

MVC中的Controler,负责接收用户的 *** 作,并把用户 *** 作通知Model

/

public class SnakeControl implements KeyListener{

SnakeModel model;

public SnakeControl(SnakeModel model){

thismodel = model;

}

public void keyPressed(KeyEvent e) {

int keyCode = egetKeyCode();

if (modelrunning){ // 运行状态下,处理的按键

switch (keyCode) {

case KeyEventVK_UP:

modelchangeDirection(SnakeModelUP);

break;

case KeyEventVK_DOWN:

modelchangeDirection(SnakeModelDOWN);

break;

case KeyEventVK_LEFT:

modelchangeDirection(SnakeModelLEFT);

break;

case KeyEventVK_RIGHT:

modelchangeDirection(SnakeModelRIGHT);

break;

case KeyEventVK_ADD:

case KeyEventVK_PAGE_UP:

modelspeedUp();

break;

case KeyEventVK_SUBTRACT:

case KeyEventVK_PAGE_DOWN:

modelspeedDown();

break;

case KeyEventVK_SPACE:

case KeyEventVK_P:

modelchangePauseState();

break;

default:

}

}

// 任何情况下处理的按键,按键导致重新启动游戏

if (keyCode == KeyEventVK_R ||

keyCode == KeyEventVK_S ||

keyCode == KeyEventVK_ENTER) {

modelreset();

}

}

public void keyReleased(KeyEvent e) {

}

public void keyTyped(KeyEvent e) {

}

}

-------------------------------------------------------------

3、

/

/

package mvcTest;

/

游戏的Model类,负责所有游戏相关数据及运行

@author WangYu

@version 10

Description:

</pre>

Create on :Date :2005-6-13 Time:15:58:33

LastModified:

History:

/

//SnakeModeljava

import javaxswing;

import javautilArrays;

import javautilLinkedList;

import javautilObservable;

import javautilRandom;

/

游戏的Model类,负责所有游戏相关数据及运行

/

class SnakeModel extends Observable implements Runnable {

boolean[][] matrix; // 指示位置上有没蛇体或食物

LinkedList nodeArray = new LinkedList(); // 蛇体

Node food;

int maxX;

int maxY;

int direction = 2; // 蛇运行的方向

boolean running = false; // 运行状态

int timeInterval = 200; // 时间间隔,毫秒

double speedChangeRate = 075; // 每次得速度变化率

boolean paused = false; // 暂停标志

int score = 0; // 得分

int countMove = 0; // 吃到食物前移动的次数

// UP and DOWN should be even

// RIGHT and LEFT should be odd

public static final int UP = 2;

public static final int DOWN = 4;

public static final int LEFT = 1;

public static final int RIGHT = 3;

public SnakeModel( int maxX, int maxY) {

thismaxX = maxX;

thismaxY = maxY;

reset();

}

public void reset(){

direction = SnakeModelUP; // 蛇运行的方向

timeInterval = 200; // 时间间隔,毫秒

paused = false; // 暂停标志

score = 0; // 得分

countMove = 0; // 吃到食物前移动的次数

// initial matirx, 全部清0

matrix = new boolean[maxX][];

for (int i = 0; i < maxX; ++i) {

matrix[i] = new boolean[maxY];

Arraysfill(matrix[i], false);

}

// initial the snake

// 初始化蛇体,如果横向位置超过20个,长度为10,否则为横向位置的一半

int initArrayLength = maxX > 20 10 : maxX / 2;

nodeArrayclear();

for (int i = 0; i < initArrayLength; ++i) {

int x = maxX / 2 + i;//maxX被初始化为20

int y = maxY / 2; //maxY被初始化为30

//nodeArray[x,y]: [10,15]-[11,15]-[12,15]~~[20,15]

//默认的运行方向向上,所以游戏一开始nodeArray就变为:

// [10,14]-[10,15]-[11,15]-[12,15]~~[19,15]

nodeArrayaddLast(new Node(x, y));

matrix[x][y] = true;

}

// 创建食物

food = createFood();

matrix[foodx][foody] = true;

}

public void changeDirection(int newDirection) {

// 改变的方向不能与原来方向同向或反向

if (direction % 2 != newDirection % 2) {

direction = newDirection;

}

}

/

运行一次

@return

/

public boolean moveOn() {

Node n = (Node) nodeArraygetFirst();

int x = nx;

int y = ny;

// 根据方向增减坐标值

switch (direction) {

case UP:

y--;

break;

case DOWN:

y++;

break;

case LEFT:

x--;

break;

case RIGHT:

x++;

break;

}

// 如果新坐标落在有效范围内,则进行处理

if ((0 <= x && x < maxX) && (0 <= y && y < maxY)) {

if (matrix[x][y]) { // 如果新坐标的点上有东西(蛇体或者食物)

if (x == foodx && y == foody) { // 吃到食物,成功

nodeArrayaddFirst(food); // 从蛇头赠长

// 分数规则,与移动改变方向的次数和速度两个元素有关

int scoreGet = (10000 - 200 countMove) / timeInterval;

score += scoreGet > 0 scoreGet : 10;

countMove = 0;

food = createFood(); // 创建新的食物

matrix[foodx][foody] = true; // 设置食物所在位置

return true;

} else // 吃到蛇体自身,失败

return false;

} else { // 如果新坐标的点上没有东西(蛇体),移动蛇体

nodeArrayaddFirst(new Node(x, y));

matrix[x][y] = true;

n = (Node) nodeArrayremoveLast();

matrix[nx][ny] = false;

countMove++;

return true;

}

}

return false; // 触到边线,失败

}

public void run() {

running = true;

while (running) {

try {

Threadsleep(timeInterval);

} catch (Exception e) {

break;

}

if (!paused) {

if (moveOn()) {

setChanged(); // Model通知View数据已经更新

notifyObservers();

} else {

JOptionPaneshowMessageDialog(null,

"you failed",

"Game Over",

JOptionPaneINFORMATION_MESSAGE);

break;

}

}

}

running = false;

}

private Node createFood() {

int x = 0;

int y = 0;

// 随机获取一个有效区域内的与蛇体和食物不重叠的位置

do {

Random r = new Random();

x = rnextInt(maxX);

y = rnextInt(maxY);

} while (matrix[x][y]);

return new Node(x, y);

}

public void speedUp() {

timeInterval = speedChangeRate;

}

public void speedDown() {

timeInterval /= speedChangeRate;

}

public void changePauseState() {

paused = !paused;

}

public String toString() {

String result = "";

for (int i = 0; i < nodeArraysize(); ++i) {

Node n = (Node) nodeArrayget(i);

result += "[" + nx + "," + ny + "]";

}

return result;

}

}

class Node {

int x;

int y;

Node(int x, int y) {

thisx = x;

thisy = y;

}

}

------------------------------------------------------------

4、

package mvcTest;

//SnakeViewjava

import javaxswing;

import javaawt;

import javautilIterator;

import javautilLinkedList;

import javautilObservable;

import javautilObserver;

/

MVC模式中得Viewer,只负责对数据的显示,而不用理会游戏的控制逻辑

/

public class SnakeView implements Observer {

SnakeControl control = null;

SnakeModel model = null;

JFrame mainFrame;

Canvas paintCanvas;

JLabel labelScore;

public static final int canvasWidth = 200;

public static final int canvasHeight = 300;

public static final int nodeWidth = 10;

public static final int nodeHeight = 10;

public SnakeView(SnakeModel model, SnakeControl control) {

thismodel = model;

thiscontrol = control;

mainFrame = new JFrame("GreedSnake");

Container cp = mainFramegetContentPane();

// 创建顶部的分数显示

labelScore = new JLabel("Score:");

cpadd(labelScore, BorderLayoutNORTH);

// 创建中间的游戏显示区域

paintCanvas = new Canvas();

paintCanvassetSize(canvasWidth + 1, canvasHeight + 1);

paintCanvasaddKeyListener(control);

cpadd(paintCanvas, BorderLayoutCENTER);

// 创建底下的帮助栏

JPanel panelButtom = new JPanel();

panelButtomsetLayout(new BorderLayout());

JLabel labelHelp;

labelHelp = new JLabel("PageUp, PageDown for speed;", JLabelCENTER);

panelButtomadd(labelHelp, BorderLayoutNORTH);

labelHelp = new JLabel("ENTER or R or S for start;", JLabelCENTER);

panelButtomadd(labelHelp, BorderLayoutCENTER);

labelHelp = new JLabel("SPACE or P for pause", JLabelCENTER);

panelButtomadd(labelHelp, BorderLayoutSOUTH);

cpadd(panelButtom, BorderLayoutSOUTH);

mainFrameaddKeyListener(control);

mainFramepack();

mainFramesetResizable(false);

mainFramesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

mainFramesetVisible(true);

}

void repaint() {

Graphics g = paintCanvasgetGraphics();

//draw background

gsetColor(ColorWHITE);

gfillRect(0, 0, canvasWidth, canvasHeight);

// draw the snake

gsetColor(ColorBLACK);

LinkedList na = modelnodeArray;

Iterator it = naiterator();

while (ithasNext()) {

Node n = (Node) itnext();

drawNode(g, n);

}

// draw the food

gsetColor(ColorRED);

Node n = modelfood;

drawNode(g, n);

updateScore();

}

private void drawNode(Graphics g, Node n) {

gfillRect(nx nodeWidth,

ny nodeHeight,

nodeWidth - 1,

nodeHeight - 1);

}

public void updateScore() {

String s = "Score: " + modelscore;

labelScoresetText(s);

}

public void update(Observable o, Object arg) {

repaint();

}

}

希望采纳

#包括< stdio, h >

#包括< process。H >

#包括< Windows。H >

#包括< conio。H >

#包括<时间。H >

#包括< stdlib。H >

#defineWIDTH40

#defineHEIGH12

枚举方向{//方向

离开了,

对的,

向上

};

StructFood{//食品

Intx;

Inty;

};

{//绘制蛇体

intx;

inty;

structNode*next;

};

structSnake{//蛇属性du

intlenth;//长度

enumdirectiondir;//方向

};

structFood*food;//食物

structSnake*snake;//蛇属性

structNode*snode,*tail;//蛇身

intSPEECH=200;

intscore=0;//分数

intsmark=0;//吃食物标zhi记

inttimes=0;

intSTOP=0;

voidInitfood();//产生食物

voidInitsnake();//构造snake

voidEatfood();//头部前进

voidAddnode(intx,inty);//增加蛇身

voiddisplay(structNode*shead);//显示蛇身坐dao标

voidmove();//蛇移动

voiddraw();//画蛇

voidHomepage();//主页

voidkeybordhit();//监控键盘按键

voidAddtail();//吃到食物

voidgotoxy(intx,inty)//定位光标

COORDpos;

pos.X=x-1;

pos.Y=y-1;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);

voidInitsnake()//构造snake

inti;

snake=(structSnake*)malloc(sizeof(structSnake));

tail=(structNode*)malloc(sizeof(structNode));

food=(structFood*)malloc(sizeof(structFood));

snake->lenth=5;//初始长度 5

snake->dir=RIGHT;//初始蛇头方向 右

for(i=2;i<=snake->lenth+2;i++)//增加 5 个结点

Addnode(i,2);

voidInitfood()//产生食物

structNode*p=snode;

intmark=1;

srand((unsigned)time(NULL));//以时间为种子产生随机数

while(1)

food->x=rand()%(WIDTH-2)+2;//食物X坐标

food->y=rand()%(HEIGH-2)+2;//食物Y坐标

while(p!=NULL)

if((food->x==p->x)&&(food->y==p->y))//如果食物产生在蛇身上

{//则重新生成食物

mark=0;//食物生成无效

break;

p=p->next;

if(mark==1)//如果食物不在蛇身上,生成食物,否则重新生成食物

gotoxy(food->x,food->y);

printf("%c",3);

break;

mark=1;

p=snode;

voidmove()//移动

structNode*q,*p=snode;

if(snake->dir==RIGHT)

Addnode(p->x+1,p->y);

if(smark==0)

while(p->next!=NULL)

q=p;

p=p->next;

q->next=NULL;

free(p);

if(snake->dir==LEFT)

Addnode(p->x-1,p->y);

if(smark==0)

while(p->next!=NULL)

q=p;

p=p->next;

q->next=NULL;

free(p);

if(snake->dir==UP)

Addnode(p->x,p->y-1);

if(smark==0)

while(p->next!=NULL)

q=p;

p=p->next;

q->next=NULL;

free(p);

if(snake->dir==DOWN)

Addnode(p->x,p->y+1);

if(smark==0)

while(p->next!=NULL)

q=p;

p=p->next;

q->next=NULL;

free(p);

voidAddnode(intx,inty)//增加蛇身

structNode*newnode=(structNode*)malloc(sizeof(structNode));

structNode*p=snode;

newnode->next=snode;

newnode->x=x;

newnode->y=y;

snode=newnode;//结点加到蛇头

if(x<2||x>=WIDTH||y<2||y>=HEIGH)//碰到边界

STOP=1;

gotoxy(10,19);

printf("撞墙,游戏结束,任意键退出!\n");//失败

_getch();

free(snode);//释放内存

free(snake);

exit(0);

while(p!=NULL)//碰到自身

if(p->next!=NULL)

if((p->x==x)&&(p->y==y))

STOP=1;

gotoxy(10,19);

printf("撞到自身,游戏结束,任意键退出!\n");//失败

_getch();

free(snode);//释放内存

free(snake);

exit(0);

p=p->next;

voidEatfood()//吃到食物

Addtail();

score++;

voidAddtail()//增加蛇尾

structNode*newnode=(structNode*)malloc(sizeof(structNode));

structNode*p=snode;

tail->next=newnode;

newnode->x=50;

newnode->y=20;

newnode->next=NULL;//结点加到蛇头

tail=newnode;//新的蛇尾

voiddraw()//画蛇

structNode*p=snode;

inti,j;

while(p!=NULL)

gotoxy(p->x,p->y);

printf("%c",2);

tail=p;

p=p->next;

if(snode->x==food->x&&snode->y==food->y)//蛇头坐标等于食物坐标

smark=1;

Eatfood();//增加结点

Initfood();//产生食物

if(smark==0)

gotoxy(tail->x,tail->y);//没吃到食物清除之前的尾结点

printf("%c",'');//如果吃到食物,不清楚尾结点

else

times=1;

if((smark==1)&&(times==1))

gotoxy(tail->x,tail->y);//没吃到食物清除之前的尾结点

printf("%c",'');//如果吃到食物,不清楚尾结点

smark=0;

gotoxy(50,12);

printf("食物: %d,%d",food->x,food->y);

gotoxy(50,5);

printf("分数:%d",score);

gotoxy(50,7);

printf("速度:%d",SPEECH);

gotoxy(15,14);

printf("按o键加速");

gotoxy(15,15);

printf("按p键减速");

gotoxy(15,16);

printf("按空格键暂停");

voidHideCursor()//隐藏光标

CONSOLE_CURSOR_INFOcursor_info={1,0};

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);

voidHomepage()//绘主页

intx,y;

HideCursor();//隐藏光标

printf("----------------------------------------\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("|\t\t\t\t|\n");

printf("----------------------------------------\n");

gotoxy(5,13);

printf("任意键开始游戏!按W.A.S.D控制方向");

_getch();

Initsnake();

Initfood();

gotoxy(5,13);

printf("");

voidkeybordhit()//监控键盘

charch;

if(_kbhit())

ch=getch();

switch(ch)

case'W':

case 'w':if(snake->dir==DOWN)//如果本来方向是下,而按相反方向无效

break;

else

snake->dir=UP;break;

case'A':

case 'a':if(snake->dir==RIGHT)//如果本来方向是右,而按相反方向无效

break;

else

snake->dir=LEFT;break;

case'S':

case 's':if(snake->dir==UP)//如果本来方向是上,而按相反方向无效

break;

else

snake->dir=DOWN;break;

case'D':

case 'd':if(snake->dir==LEFT)//如果本来方向是左,而按相反方向无效

break;

else

snake->dir=RIGHT;break;

case'O':

case'o':

if(SPEECH>=150)//速度加快

SPEECH=SPEECH-50;

break;

case'P':

case'p':

if(SPEECH<=400)//速度减慢

SPEECH=SPEECH+50;

break;

case''://暂停

gotoxy(15,18);

printf("游戏已暂停,按任意键恢复游戏");

system("pause>nul");

gotoxy(15,18);

printf("");

break;

default:break;

intmain(void)//程序入口

Homepage();

while(!STOP)

keybordhit();//监控键盘按键

move();//蛇的坐标变化

draw();//蛇的重绘

Sleep(SPEECH);//暂时挂起线程

return0;

扩展资料:

注意事项:

1.代码将源信息转换为易于通信或存储的符号。译码(译码)是还原和译码的过程,它将代码符号转换为接受者能够理解的形式。

2.编码的原因之一是为了在普通语言(口头或书面)难以实现的情况下进行交流。例如,一面旗帜可以用一个特定的标记来表达一个特定的信息,而站在远处的另一个人可以解释标记来重现该信息。

以上就是关于求Java 大神给个可以在eclipse上运行的贪吃蛇源代码在线等急全部的内容,包括:求Java 大神给个可以在eclipse上运行的贪吃蛇源代码在线等急、求一个贪吃蛇C语言源代码、求一段JAVA编写的贪吃蛇小程序源代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9822613.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存