一个java写的贪吃蛇程序

作者回忆了自己初学编程的经历,从对电脑一无所知到成为系里编程高手的故事。文中详细描述了作者自学Java的过程,以及编写贪吃蛇游戏的代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个代码是我初涉编程的那年写成的,我从哈尔滨退学去了新乡我女朋友(现在成了俺老婆了)那里,在那里经历了个冬天,我们租的小屋是木板隔开的,有个公用阳台可以做饭,我们当时没有电脑,没有电视,我除了她什么也没有了,本科学历没有了,朋友也开始对我的能力表示怀疑,家人更是认为我不争气,高中一直是数 一数二的我却沦落到没学上的境地,我的心里很惨很黯淡,在新乡的几个月里我没有闲着,整天排的很满,早上起来就开始抄她在她学校借的狄拉克经典名著《量子力学》然后九点多去学校对面的小破街买菜,回来就给她做饭,记得她当时喜欢吃鸡蛋西红柿面条,呵呵,现在也是,我于是天天做那样饭,吃得我现在都不能想, 一想牙就麻!下午我仍然重复上午的“工作”,她一整天上课的时候我就去市区的新华书店看书,当时就看物理学或机械方面的...
一转眼快过年了,我爸帮我联系了一个补习班,于是03年的头半年我就去补习班了,准备第二次高考,可是我哪有心思学习,揣着多年的梦想就这样把它永远当成了梦,眼看高考了,结果很显然,失败----郑州大学软件技术学院网络与信息安全专业,大专,还是两年的。九月份开学了,上机课,我可丢了大人,作为软件学院的,连怎么把电影从光盘拷贝到电脑都不会...第一次上java课,我和女朋友吵架,怕她生气就坐半夜2点的车从郑州赶往新乡,到的时候才3点,根本 没有去她学校的公交,于是我就走过去,4点半到,又在她寝室楼下等了将近两个小时...第一节java课没上,我再回到学校发现自己已经明显跟不上了,但 是一次偶然的机会我写下了:(此代码绝对原版,原汁原味我的第一个程序,珍藏!)
public class a
{
public static void main(String s[])
{
int a=5;
int b=3;
int c=a+b;
System.out.println(c);
}
}
编 译运行后“奇迹般的出现了:8”(我光学编译书上的hello world就学了一周,以前根本不知道电脑是干什么的)于是狂喜,不知怎么回事,以后慢慢喜欢上了编程,进步很快,不出两个月,我的水平就已经是系里拔尖的了,巧的是我们的教java的老师还把我的一个程序作为了期末考试题,而那次期末考试我又是因为和女友吵架而缺考java...
到了第二学期,5月20号,我女朋友过生日,我们去了日照,回来时我发现我又离不开她了,我不能看见她依赖的望我的眼睛,一看见我就想一直陪在她身边,于是第二次离开学校,好在这次在郑州,离新乡比较近,我又一次搬到了那个小村庄,又是那点工作,只不过不再抄书了,改成写代码了,当时我已经有电脑了,下面 的代码就是那个时候写的,还有一个弹球小游戏下一篇贴出来,期末回去考试,还不错
转眼就是第二学年,也是我的最后一学年,这年里,我第三次离开了学校,也就是第三次搬进了那个小村庄,实际上是第五次,在我从哈尔滨回来之前的03年国庆 节我就在那个村庄住了将近一个月,然后第二次高考完在那住过一个月。这第三次,我们不怎么做饭了,因为天实在太冷了,屋里的水都能结冰,我也懒得写代码了,也是因为冷,可和她在一起,再冷我也愿意。
过完年大家都找到了实习单位,就差我了,我也不准备找了,想来上海找工作,这时她拿到了吉林大学研究生录取通知书,我的心里百感交集,几分欢喜几分惆怅,我能做的也只是再一次陪着她去了东北,因为我愿意。于是正式开始了我的IT旅程,在长春,我接触到了linux内核,并且开始喜欢上了它,一步一步地,我 深入到了操作系统内核,写了第一个,第二个....第n个驱动程序,一步一步地,我一直走到了今天
注释一下:下面的代码确实很垃圾,但是对于我来说却非常珍贵,异常珍贵,它记录了我和她在一起那一个炎热的难熬的却令我难忘的2005年的夏天,我初涉编程的第一个夏天。

import java.applet.*;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class tanchi extends JFrame implements KeyListener ,Runnable

{

Thread t=null;

Image offs;

Graphics gra;

int direc=3;

snake she;

food shi;//不知我当时为何将蛇的食物当成了屎,哈哈

zhangai zu;

int flag=0;

int jibie=0;

int biaozhi=0;

int fen=0;

int delay=600;

int ci=-1;

boolean xing;

int jieshu=0; //结束的次数

JPanel mainp;

int zhanwei[][]=new int[1444][1444];

Image im;

public tanchi()

{

String imagef=System.getProperty("user.dir")+"/2.PNG";

im=getToolkit().getImage(imagef);

xing=true;

she=new snake(4,zhanwei);

shi=new food();

zu=new zhangai(5,zhanwei);

zu.zushu=5;

shi.yes=true;

mainp=new JPanel();

mainp.addKeyListener(this);

mainp.setFocusable(true);

getContentPane().setLayout(null);

getContentPane().add(mainp);

mainp.setBounds(10,10,740,380);

setTitle("贪吃蛇");

setSize(700,450);

setResizable(false);

setVisible(true);

for(int i=0;i

for(int j=0;j

{

zhanwei[i][j]=0;

}

t=new Thread(this);

t.start();

}

public void paint(Graphics g)

{

g = mainp.getGraphics();

g.setFont(new Font("",2,20));

g.setColor(Color.blue);

g.drawString("得分:",400,30);

g.drawString("您的级别:",400,80);

g.drawString("<t>:暂停/开始|<b>:重新开始",400,130);</b></t>

g.drawString("<j>:加速|<k>:减速",400,180);</k></j>

g.drawString("游戏须知:",400,230);

g.drawRect(420,250,200,110);

g.setFont(new Font("",0,15));

g.drawString("1:吃掉兰色方块时加分",430,268);

g.drawString("2:出现红色方块时不能碰,",430,288);

g.drawString("否则游戏结束。",451,308);

g.drawString("3:不能碰墙或自身,否则",430,328);

g.drawString("否则游戏结束。",451,348);

g.clearRect(520,15,100,100);

g.setFont(new Font("",2,20));

g.drawString(""+fen,520,30);

g.drawString(""+jibie,520,80);

if(biaozhi==0)

{

for(int i=0;i

for(int j=0;j

{

if(zhanwei[i/10][j/10]==0)

{

g.setColor(Color.orange);

g.drawRect(i,j,10,10);

g.setColor(Color.lightGray);

if(i==370)

g.fillRect(i,j,11,9);

else

g.fillRect(i,j,9,9);

}

else if(zhanwei[i/10][j/10]==1)

{

g.setColor(Color.blue);

g.fillRect(i,j,9,9);

}

else if(zhanwei[i/10][j/10]==2)

{

g.setColor(Color.red);

g.fillRect(i,j,9,9);

}

}

}

if(biaozhi==1||she.x[0]==-10||she.y[0]==-10)

{

for(int i=0;i

for(int j=0;j

{

g.setColor(Color.orange);

g.drawRect(i,j,10,10);

g.setColor(Color.lightGray);

if(i==370)

g.fillRect(i,j,11,9);

else

g.fillRect(i,j,9,9);

}

g.setFont(new Font("华文彩云",3,30));

g.setColor(Color.red);

g.drawString("GAME OVER",90,140);

g.setFont(new Font("",4,20));

g.drawString("您的得分:"+fen,90,190);

}

}

public void run()

{

try{

while(true)

{

//食物的产生也要看障的情况

if(xing)

{

if(shi.yes)

{

boolean chong=false;

int lix=(int)(Math.random()*300)+40;

int liy=(int)(Math.random()*300)+40;

int baix=(int)(Math.random()*300)+40;

int baiy=(int)(Math.random()*20)+10;

for(int i=0;i<zu.zushu><p> {</p> <p> if(((lix-lix%10)==zu.x[i]&amp;&amp;(liy-liy%10)==zu.y[i])||((lix-lix%10+10)==zu.x[i]&amp;&amp;(liy-liy%10)==zu.y[i])||((lix-lix%10)==zu.x[i]&amp;&amp;(liy-liy%10+10)==zu.y[i])||((lix-lix%10-10)==zu.x[i]&amp;&amp;(liy-liy%10)==zu.y[i])||((lix-lix%10)==zu.x[i]&amp;&amp;(liy-liy%10-10)==zu.y[i]))</p> <p> {</p> <p> chong=true;</p> <p> break;</p> <p> }</p> <p> }</p> <p> if(zhanwei[(lix-lix%10)/10][(liy-liy%10)/10]==1)</p> <p> chong=true;</p> <p> if(chong)</p> <p> {</p> <p> shi.x=baix-baix%10;</p> <p> shi.y=baiy-baiy%10;</p> <p> }</p> <p> if(!chong)</p> <p> {</p> <p> shi.x=lix-lix%10;</p> <p> shi.y=liy-liy%10;</p> <p> }</p> <p> zhanwei[shi.x/10][shi.y/10]=1;</p> <p> shi.yes=false;</p> <p> }</p> <p> if(she.x[0]==shi.x&amp;&amp;she.y[0]==shi.y)</p> <p> {</p> <p> she.renode(she.node,she.x,she.y);</p> <p> shi.yes=true;</p> <p> zhanwei[shi.x/10][shi.y/10]=0;</p> <p> fen+=20;</p> <p> if(fen%100==0)</p> <p> {</p> <p> jibie++;</p> <p> if(jibie&gt;=10)</p> <p> {</p> <p> zu.zushu=0;/////////////////////////////////////////</p> <p> }</p> <p> else</p> <p> {</p> <p> if(jibie&gt;1)</p> <p>zu.xiezu(zu.x,zu.y);</p> <p> zu.zushu+=4;</p> <p> zu.reshu(zu.zushu,she.x[0],she.y[0],shi.x,shi.y); //,zu.x,zu.y);////////////////////</p> <p>}</p> <p> }</p> <p> }</p> <p> for(int i=2;i<she.node><p> {</p> <p> if(she.x[0]==she.x[i]&amp;&amp;she.y[0]==she.y[i])</p> <p> {</p> <p> flag=1;</p> <p> break;</p> <p> }</p> <p> }</p> <p> for(int i=0;i<zu.zushu><p> {</p> <p> if(she.x[0]==zu.x[i]&amp;&amp;she.y[0]==zu.y[i])</p> <p> {</p> <p> flag=1;</p> <p> jieshu++;</p> <p> break;</p> <p> }</p> <p> }</p> <p> if(she.x[0]&gt;370||she.x[0]370||flag==1)</p> <p> { </p> <p> biaozhi=1;</p> <p> repaint();</p> <p> break;</p> <p> }</p> <p> if(biaozhi!=1)</p> <p> she.zou(direc);</p> <p> Thread.sleep(delay);</p> <p> repaint();</p> <p> }</p> <p> }</p> <p> }catch(Exception e){}</p> <p> }</p> <p> public void keyPressed(KeyEvent ke)</p> <p> {</p> <p> }</p> <p> public void keyReleased(KeyEvent ke)</p> <p> {</p> <p> }</p> <p> public void keyTyped(KeyEvent ke)</p> <p> {</p> <p> if((""+ke.getKeyChar()).equals("w"))</p> <p> {</p> <p> direc=she.fangxiang("w");</p> <p> if(she.y[0]&gt;0)</p> <p> she.zou(direc);</p> <p> }</p> <p> else if((""+ke.getKeyChar()).equals("s"))</p> <p> {</p> <p> direc=she.fangxiang("s");</p> <p> she.zou(direc);</p> <p> } </p> <p> else if((""+ke.getKeyChar()).equals("a"))</p> <p> {</p> <p> direc=she.fangxiang("a");</p> <p> if(she.x[0]&gt;0)</p> <p> she.zou(direc);</p> <p> }</p> <p> else if((""+ke.getKeyChar()).equals("d"))</p> <p> {</p> <p> direc=she.fangxiang("d");</p> <p> she.zou(direc);</p> <p> } </p> <p> else if((""+ke.getKeyChar()).equals("b"))</p> <p> {</p> <p> if(t.isAlive() )</p> <p> t.interrupt();</p> <p> t=new Thread(this);</p> <p> for(int i=0;i </p> <p> for(int j=0;j </p> <p> {</p> <p> zhanwei[i][j]=0;</p> <p> }</p> <p> she=new snake(4,zhanwei);</p> <p> shi=new food();</p> <p> shi.yes=true;</p> <p> zu=new zhangai(5,zhanwei);</p> <p> zu.zushu=5;</p> <p> xing=true;</p> <p> Graphics g = mainp.getGraphics();</p> <p> g.clearRect(0,0,380,380);</p> <p> direc=3;</p> <p> ci=-1;</p> <p> flag=0;</p> <p> jibie=0;</p> <p> biaozhi=0;</p> <p> fen=0;</p> <p> delay=600;</p> <p> she.zou(3);</p> <p> t.start();</p> <p> }</p> <p> else if((""+ke.getKeyChar()).equals("t"))</p> <p> { </p> <p> ci++;</p> <p> if(ci%2==0)</p> <p> xing=false;</p> <p> else if(ci%2==1)</p> <p> xing=true;</p> <p> }</p> <p> else if((""+ke.getKeyChar()).equals("j"))</p> <p> {</p> <p> if(delay&gt;=50)</p> <p> delay-=50;</p> <p> }</p> <p> else if((""+ke.getKeyChar()).equals("k"))</p> <p> {</p> <p> delay+=50;</p> <p> }</p> <p> }</p> <p> public static void main(String str[])</p> <p> {</p> <p> new tanchi();</p> <p> }</p> <p> }</p> <p> class snake</p> <p> {</p> <p> int x[];</p> <p> int y[];</p> <p> int node=4;</p> <p> int yipx;</p> <p> int yipy;</p> <p> int zhan[][];</p> <p> public snake(int nod,int[][] zhan)</p> <p> { </p> <p> x=new int[nod];</p> <p> y=new int[nod];</p> <p> this.zhan=zhan;</p> <p> for(int i=0;i<node><p> {</p> <p> x[i]=190+i*10;</p> <p> y[i]=190;</p> <p> zhan[x[i]/10][19]=1;</p> <p> }</p> <p> }</p> <p> public int fangxiang(String str)</p> <p> {</p> <p> int re=0;</p> <p> if(str.equals("w"))</p> <p> re=1;</p> <p> else if(str.equals("s"))</p> <p> re=2;</p> <p> else if(str.equals("a"))</p> <p> re=3;</p> <p> else if(str.equals("d"))</p> <p> re=4;</p> <p> return re; </p> <p> }</p> <p> public void renode(int laonode,int[] xn,int[] yn)</p> <p> { </p> <p> node++;</p> <p> x=new int[laonode+1];</p> <p> y=new int[laonode+1];</p> <p> for(int i=0;i<laonode><p> {</p> <p> x[i]=xn[i];</p> <p> y[i]=yn[i];</p> <p> zhan[x[i]/10][y[i]/10]=1;</p> <p> }</p> <p> x[laonode]=yipx;</p> <p> y[laonode]=yipy;</p> <p> }</p> <p> public void zou(int direction)</p> <p> {</p> <p> int linshi=0;</p> <p> zhan[x[node-1]/10][y[node-1]/10]=0;</p> <p> if(direction==1)</p> <p> {</p> <p> linshi=y[0];</p> <p> yipx=x[node-1];</p> <p> yipy=y[node-1];</p> <p> for(int i=node-1;i&gt;0;i--)</p> <p> {</p> <p> x[i]=x[i-1];</p> <p> y[i]=y[i-1];</p> <p> zhan[x[i]/10][y[i]/10]=1;</p> <p>}</p> <p> y[0]=linshi-10;</p> <p> zhan[x[0]/10][y[0]/10]=1;</p> <p>}</p> <p> else if(direction==2)</p> <p> {</p> <p> linshi=y[0];</p> <p>yipx=x[node-1];</p> <p> yipy=y[node-1];</p> <p>for(int i=node-1;i&gt;0;i--)</p> <p> {</p> <p> x[i]=x[i-1];</p> <p> y[i]=y[i-1];</p> <p> zhan[x[i]/10][y[i]/10]=1;</p> <p>}</p> <p> y[0]=linshi+10;</p> <p> zhan[x[0]/10][y[0]/10]=1;</p> <p>}</p> <p> else if(direction==3)</p> <p> {</p> <p> linshi=x[0];</p> <p>yipx=x[node-1];</p> <p> yipy=y[node-1];</p> <p>for(int i=node-1;i&gt;0;i--)</p> <p> {</p> <p> x[i]=x[i-1];</p> <p> y[i]=y[i-1];</p> <p> zhan[x[i]/10][y[i]/10]=1;</p> <p>}</p> <p> x[0]=linshi-10;</p> <p> zhan[x[0]/10][y[0]/10]=1;</p> <p>}</p> <p> else if(direction==4)</p> <p> {</p> <p> linshi=x[0];</p> <p>yipx=x[node-1];</p> <p> yipy=y[node-1];</p> <p>for(int i=node-1;i&gt;0;i--)</p> <p> {</p> <p> x[i]=x[i-1];</p> <p> y[i]=y[i-1];</p> <p> zhan[x[i]/10][y[i]/10]=1;</p> <p>}</p> <p> x[0]=linshi+10;</p> <p> zhan[x[0]/10][y[0]/10]=1;</p> <p>} </p> <p> }</p> <p> }</p> <p> class food</p> <p> {</p> <p> int x;</p> <p> int y;</p> <p> boolean yes;//判断是否要出现食物的变量</p> <p> }</p> <p> class zhangai</p> <p> {</p> <p> int x[];</p> <p> int y[];</p> <p> int zushu;</p> <p> int zhan[][];</p> <p> public zhangai(int nod,int[][] zhan)</p> <p> { </p> <p> this.zhan=zhan;</p> <p> x=new int[nod];</p> <p> y=new int[nod];</p> <p> for(int i=0;i<nod><p> {</p> <p> x[i]=-20;</p> <p> y[i]=-20;</p> <p> }</p> <p> }</p> <p> public void xiezu(int[] x,int[] y)</p> <p> {</p> <p> for(int i=0;i<zushu><p> {</p> <p> if(x[i]&gt;10&amp;&amp;y[i]&gt;0)</p> <p> zhan[x[i]/10][y[i]/10]=0;</p> <p> }</p> <p> }</p> <p> public void reshu(int za,int px,int py,int sx,int sy) </p> <p> { </p> <p> x=new int[za];</p> <p> y=new int[za];</p> <p> for(int i=0;i<za><p> {</p> <p> int lix=(int)(Math.random()*320)+40;</p> <p> int zux=lix-lix%10;</p> <p> int liy=(int)(Math.random()*320)+40;</p> <p> int zuy=liy-liy%10;</p> <p> if(px!=zux&amp;&amp;(px+10)!=zux&amp;&amp;(px-10)!=zux&amp;&amp;(px-20)!=zux&amp;&amp;(px+20)!=zux&amp;&amp;(px-30)!=zux&amp;&amp;(px+30)!=zux&amp;&amp;(py-30)!=zuy&amp;&amp;(py+30)!=zuy&amp;&amp;sx!=zux&amp;&amp;(sx+10)!=zux&amp;&amp;(sx-10)!=zux&amp;&amp;(sx-20)!=zux&amp;&amp;(sx+20)!=zux&amp;&amp;py!=zuy&amp;&amp;(py+10)!=zuy&amp;&amp;(py-10)!=zuy&amp;&amp;(py-20)!=zuy&amp;&amp;(py+20)!=zuy&amp;&amp;sy!=zuy&amp;&amp;(sy+10)!=zuy&amp;&amp;(sy-10)!=zuy&amp;&amp;(sy-20)!=zuy&amp;&amp;(sy-30)!=zuy&amp;&amp;(sy+30)!=zuy&amp;&amp;(sx-30)!=zux&amp;&amp;(sx+30)!=zux&amp;&amp;(sy+20)!=zuy)</p> <p> {</p> <p> x[i]=zux;</p> <p> y[i]=zuy;</p> <p> zhan[x[i]/10][y[i]/10]=2;</p> <p> }</p> <p> else</p> <p> {</p> <p> x[i]=-20;</p> <p> y[i]=-20;</p> <p> }</p> <p> }</p> <p> } </p> <p> }</p> </za></p></zushu></p></nod></p></laonode></p></node></p></zu.zushu></p></she.node></p></zu.zushu>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值