贪食蛇怎么走的这么奇葩....

问题描述

为什么这个蛇有的时候会一下走两格?一卡一卡的找了好久都没有找出错误....才这么点程序不会是电脑卡造成的吧,求大神帮忙看看[code=publicclassGameTest{publicstaticvoidmain(String[]args){Yardy=newYard(newSnake());y.gameBegin();}}importjava.awt.Color;importjava.awt.Font;importjava.awt.Frame;importjava.awt.Graphics;importjava.awt.Image;importjava.awt.event.KeyAdapter;importjava.awt.event.KeyEvent;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;publicclassYardextendsFrame{privateSnakesnake;//privateEggegg;//privateWallwall;publicYard(Snakesnake){super("贪食蛇");this.snake=snake;//this.egg=egg;//this.wall=wall;this.setBounds(0,0,util.COLS*util.SIZE,util.ROWS*util.SIZE);this.setBackground(Color.GRAY);this.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){System.exit(0);}});this.setVisible(true);this.addKeyListener(newKeyMoniter());}privateImageibuffer;privateGraphicsgbuffer;publicvoidupdate(Graphicsg){if(ibuffer==null){ibuffer=this.createImage(this.getSize().width,this.getSize().width);gbuffer=ibuffer.getGraphics();}gbuffer.setColor(getBackground());gbuffer.fillRect(0,0,this.getSize().width,this.getSize().height);paint(gbuffer);g.drawImage(ibuffer,0,0,null);}Fontfont=newFont("宋体",Font.BOLD,20);publicvoidpaint(Graphicsg){System.out.println("画出游戏界面和格子不包括窗口");g.setColor(Color.BLACK);//画出横线for(inti=0;i<util.ROWS;i++){g.drawLine(0,util.SIZE*i,util.SIZE*util.COLS,util.SIZE*i);}//画出竖线for(inti=0;i<util.COLS;i++){g.drawLine(util.SIZE*i,0,util.SIZE*i,util.SIZE*util.ROWS);}g.setFont(font);g.setColor(Color.red);g.drawString("score:",1*util.SIZE,3*util.SIZE);g.drawString(util.getScore(),6*util.SIZE,3*util.SIZE);//wall.drawMe();snake.drawMe(g);//egg.drawMe();}privateclasssnakeThreadimplementsRunnable{//蛇不断移动publicvoidrun(){while(true){repaint();snake.move();try{Thread.sleep(util.TEMPO);}catch(InterruptedExceptione){e.printStackTrace();}}}}publicvoidstart(){newThread(newsnakeThread()).start();}publicvoidgameBegin(){System.out.println("开始游戏");start();}publicclassKeyMoniterextendsKeyAdapter{publicvoidkeyPressed(KeyEvente){switch(e.getKeyCode()){caseKeyEvent.VK_UP:snake.changeDir(util.UP);break;caseKeyEvent.VK_DOWN:snake.changeDir(util.DOWN);break;caseKeyEvent.VK_LEFT:snake.changeDir(util.LEFT);break;caseKeyEvent.VK_RIGHT:snake.changeDir(util.RIGHT);break;}}}}importjava.awt.Color;importjava.awt.Graphics;importjava.util.LinkedList;publicclassSnake{privateintdir;//蛇方向privateYardyard;publicLinkedList<body>bodys=newLinkedList<body>();publicSnake(){init();}privatevoidinit(){//初始化方法for(inti=0;i<util.INIT;i++){bodys.addLast(newbody(util.C_ROW,util.C_COL+i));}dir=util.LEFT;}publicvoidmove(){System.out.println("蛇移动");//去尾bodys.removeLast();//加头bodyb=bodys.getFirst();introw=b.ROW;intcol=b.COL;switch(this.dir){caseutil.UP:if(row<2){row=util.ROWS-2;}else{row--;}break;caseutil.DOWN:if(row>util.ROWS-2){row=2;}else{row++;}break;caseutil.LEFT:if(col<2){col=util.COLS-2;}else{col--;}break;caseutil.RIGHT:if(col>util.COLS-2){col=2;}else{col++;}break;}bodys.addFirst(newbody(row,col));}publicvoidchangeMove(){System.out.println("改变蛇移动速度");}publicvoidchangeDir(intdir){System.out.println("蛇改变方向");this.dir=dir;}publicvoideatEgg(){System.out.println("蛇吃蛋");}publicbooleanisEatBody(){System.out.println("判断蛇是否吃到身体");returnfalse;}publicvoiddrawMe(Graphicsg){System.out.println("画出蛇");g.setColor(Color.BLUE);for(bodyb:bodys){g.fill3DRect(b.COL*util.SIZE,b.ROW*util.SIZE,util.SIZE,util.SIZE,true);}}publicvoiddie(){System.out.println("蛇死了");}privatestaticclassbody{//蛇身体类privateintROW;privateintCOL;publicbody(intrOW,intcOL){ROW=rOW;COL=cOL;}publicintgetROW(){returnROW;}publicvoidsetROW(intrOW){ROW=rOW;}publicintgetCOL(){returnCOL;}publicvoidsetCOL(intcOL){COL=cOL;}}}//参数类publicclassutil{//游戏界面参数publicstaticfinalintROWS=30;//行publicstaticfinalintCOLS=30;//列publicstaticfinalintSIZE=15;//蛇参数publicstaticfinalintINIT=10;//初始时蛇身长度//蛇移动速度参数publicstaticfinalintTEMPO=1000;publicstaticfinalintSLOW=1000;publicstaticfinalintCENTER=600;publicstaticfinalintFAST=300;publicstaticfinalintMIN=100;//蛇初始位置publicstaticfinalintC_COL=COLS/2;publicstaticfinalintC_ROW=ROWS/2;//方向参数publicstaticfinalintUP=-1;publicstaticfinalintDOWN=1;publicstaticfinalintLEFT=-2;publicstaticfinalintRIGHT=2;//分数publicstaticIntegerscore=0;publicvoidsetScore(intscore){this.score=score;}publicstaticStringgetScore(){//TODOAuto-generatedmethodstubreturnscore.toString();}}[/code]

解决方案

本帖最后由 u010795682 于 2014-06-27 23:38:16 编辑

时间: 2025-01-18 19:27:29

贪食蛇怎么走的这么奇葩....的相关文章

双向链表-多线程双线链表实现贪食蛇蛇身不长,怎么破

问题描述 多线程双线链表实现贪食蛇蛇身不长,怎么破 #include #include #include #include typedef struct node{ int* body; struct node* p_prev; struct node* p_next; }node; node head; int move(); char dir; int* SaveTailBody; //保存尾节点地址 void show(int map[20][20],int x,int y) { for(

在线旅游正以“贪食蛇”模式洗牌

携程新劲敌来了.对手靠"吞并同类"的贪食蛇模式显现江湖. 总部位于广州的易网通旅行(以50.7%的份额控股广之旅)近日宣布,全资收购总部在北京的游易航空旅行网,成立"易网通游易"新公司,年营收总额达17.5亿元,超过在线旅游老大携程16亿的年收入. 蚂蚁雄兵能够击败大象吗?"从第三方研究数据看,携程在在线旅游市场占领先地位,占据的80%以上的市场份额正在进一步扩大."携程CEO范敏回答淡定. 当心!在线旅游企业开始新一轮洗牌了.细分到机票预订这类

“贪食蛇”亚马逊不断扩张持续亏损:是时候考虑盈利问题了

导语:亚马逊就像一个贪食蛇,不断投资.不断吞食.不断膨胀,在利润面前不慌不忙.只是,亚马逊是否会"成于贪食.亦败于贪食"? 上周,亚马逊公布2013年第二季度财报,亏损700万美元.股东和业界对此并不惊讶,亚马逊的亏损不是一两个季度了.上市后16年来亚马逊时常爆出亏损消息,股票却仍然一路高涨,市盈率已超过3000倍.像这样的亚马逊业界"奇葩",独此一家,没有分店. 亚马逊高层总在华尔街质疑他们时说,"如果我们想追求利润,下个季度就可以让利润翻番."

当心!在线旅游正以“贪食蛇”模式洗牌

漫画:张建辉 携程新劲敌来了.对手靠"吞并同类"的贪食蛇模式显现江湖. 总部位于广州的易网通旅行(以50 .7%的份额控股广之旅)近日宣布,全资收购总部在北京的游易航空旅行网,成立"易网通游易"新公司,年营收总额达17.5亿元,超过在线旅游老大携程16亿的年收入. 蚂蚁雄兵能够击败大象吗?"从第三方研究数据看,携程在在线旅游市场占领先地位,占据的80%以上的市场份额正在进一步扩大."携程CEO范敏回答淡定. 当心!在线旅游企业开始新一轮洗牌了.细

Console小技巧——Console版贪食蛇

其实这是我写的第一个小游戏,大学C语言那个剪子.石头.布的实验我是没做-- 今天刚好是愚人节,就把这个当作小礼物送给大家,希望大家天天高兴 :) 这个Console版贪食蛇是"七彩输出"和"字符涂鸦"的综合应用. 估计编写Console程序用得最多的就是ReadLine()和WriteLine()这两个方法了吧,其实Console还有几 个很有用的方法,稍加组合就可以使Console程序非常有意思了. 这里挑几个核心的总结一下. 如何使输出有颜色: Console.

c++-菜鸟求大神帮忙解答贪食蛇问题

问题描述 菜鸟求大神帮忙解答贪食蛇问题 以下的这段贪食蛇代码是我在百度上看到的,我不理解int tcsZuobiao[2][100]; //蛇的坐标数组for (i = 0; i tcsZuobiao[0][i] = 1; tcsZuobiao[1][i] = i + 1; }这里为什么蛇的坐标是[2][100]呢,还有循环里面的也不懂为什么要这样弄 #include #include #include #include using namespace std; // 刷新当前屏幕 inline

Flash游戏制作:贪食蛇经典游戏新手教程

教程 这是我写的第一个游戏..功能还没完善..只有最基本的功能..先把大致的拿上来让大家看看先. 效果及源文件:贪吃蛇.rar 其实整个游戏一共要解决几个问题. 1.如何让蛇根据键盘的方向移动? 2.如何让食物随机分布? 3.如何让蛇碰到食物的时候食物消失蛇身加长? 4.如何移动框外或者碰到蛇身就就GAME OVER. 先说第一个问题 .1.如何让蛇根据键盘的方向移动?先将复杂的问题简单化.就一个MC而言.我们如何通过键盘移动呢? 新建MC..并将起命名成 snakehead(蛇头)然后在新建一

用vb编写贪食蛇

' ' Q B a s i c N i b b l e s ' ' Copyright (C) Microsoft Corporation 1990 ' ' Nibbles is a game for one or two players. Navigate your snakes ' around the game board trying to eat up numbers while avoiding ' running into walls or other snakes. The mo

MFC 写贪食蛇时遇到的问题..

问题描述 界面如下在classwizard中加了按键响应处理函数voidC贪吃蛇Dlg::OnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags){//MessageBox(L"游111戏:");//TODO:在此添加消息处理程序代码和/或调用默认值switch(nChar){caseVK_LEFT:dir=left;break;caseVK_RIGHT:dir=right;break;caseVK_UP:dir=up;break;caseVK_DOWN: