一个java写的贪吃蛇程序

晨曦之光 发布于 2012/04/10 15:02
阅读 540
收藏 0

这个代码是我初涉编程的那年写成的,我从哈尔滨退学去了新乡我女朋友(现在成了俺老婆了)那里,在那里经历了个冬天,我们租的小屋是木板隔开的,有个公用阳台可以做饭,我们当时没有电脑,没有电视,我除了她什么也没有了,本科学历没有了,朋友也开始对我的能力表示怀疑,家人更是认为我不争气,高中一直是数 一数二的我却沦落到没学上的境地,我的心里很惨很黯淡,在新乡的几个月里我没有闲着,整天排的很满,早上起来就开始抄她在她学校借的狄拉克经典名著《量子力学》然后九点多去学校对面的小破街买菜,回来就给她做饭,记得她当时喜欢吃鸡蛋西红柿面条,呵呵,现在也是,我于是天天做那样饭,吃得我现在都不能想, 一想牙就麻!下午我仍然重复上午的“工作”,她一整天上课的时候我就去市区的新华书店看书,当时就看物理学或机械方面的...
一转眼快过年了,我爸帮我联系了一个补习班,于是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<1444;i++)

       for(int j=0;j<1444;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(" :暂停/开始| :重新开始",400,130);

    g.drawString(" :加速| :减速",400,180);

    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<380;i+=10)

      for(int j=0;j<380;j+=10)

        {

         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<380;i+=10)

             for(int j=0;j<380;j+=10)

              {

                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

                     {

                        if(((lix-lix%10)==zu.x[i]&&(liy-liy%10)==zu.y[i])||((lix-lix%10+10)==zu.x[i]&&(liy-liy%10)==zu.y[i])||((lix-lix%10)==zu.x[i]&&(liy-liy%10+10)==zu.y[i])||((lix-lix%10-10)==zu.x[i]&&(liy-liy%10)==zu.y[i])||((lix-lix%10)==zu.x[i]&&(liy-liy%10-10)==zu.y[i]))

                          {

                            chong=true;

                            break;

                          }

                      }

                     if(zhanwei[(lix-lix%10)/10][(liy-liy%10)/10]==1)

                        chong=true;

                     if(chong)

                       {

                           shi.x=baix-baix%10;

                           shi.y=baiy-baiy%10;

                       }

                     if(!chong)

                       {

                          shi.x=lix-lix%10;

                          shi.y=liy-liy%10;

                        }

                    zhanwei[shi.x/10][shi.y/10]=1;

                    shi.yes=false;

                 }

               if(she.x[0]==shi.x&&she.y[0]==shi.y)

                {

                 she.renode(she.node,she.x,she.y);

                 shi.yes=true;

                 zhanwei[shi.x/10][shi.y/10]=0;

                 fen+=20;

                 if(fen%100==0)

                  {

                    jibie++;

                    if(jibie>=10)

                     {

                        zu.zushu=0;/////////////////////////////////////////

                     }

                    else

                    {

                      if(jibie>1)

zu.xiezu(zu.x,zu.y);

                      zu.zushu+=4;

                      zu.reshu(zu.zushu,she.x[0],she.y[0],shi.x,shi.y);  //,zu.x,zu.y);////////////////////

}

                  }

                }

               for(int i=2;i

               {

                 if(she.x[0]==she.x[i]&&she.y[0]==she.y[i])

                   {

                     flag=1;

                     break;

                   }

               }

              for(int i=0;i

               {

                 if(she.x[0]==zu.x[i]&&she.y[0]==zu.y[i])

                   {

                     flag=1;

                     jieshu++;

                     break;

                   }

               }

              if(she.x[0]>370||she.x[0]<0||she.y[0]<0||she.y[0]>370||flag==1)

                 {

                    biaozhi=1;

                    repaint();

                    break;

                   }

                if(biaozhi!=1)

               she.zou(direc);

            Thread.sleep(delay);

            repaint();

          }

       }

    }catch(Exception e){}

    }

    public void keyPressed(KeyEvent ke)

    {

     }

    public void keyReleased(KeyEvent ke)

    {

     }

    public void keyTyped(KeyEvent ke)

    {

    if((""+ke.getKeyChar()).equals("w"))

      {

        direc=she.fangxiang("w");

        if(she.y[0]>0)

         she.zou(direc);

      }

    else if((""+ke.getKeyChar()).equals("s"))

      {

       direc=she.fangxiang("s");

       she.zou(direc);

     }

    else if((""+ke.getKeyChar()).equals("a"))

      {

        direc=she.fangxiang("a");

        if(she.x[0]>0)

          she.zou(direc);

       }

    else if((""+ke.getKeyChar()).equals("d"))

      {

       direc=she.fangxiang("d");

       she.zou(direc);

     }

    else if((""+ke.getKeyChar()).equals("b"))

       {

        if(t.isAlive() )

          t.interrupt();

        t=new Thread(this);

        for(int i=0;i<1444;i++)

       for(int j=0;j<1444;j++)

        {

          zhanwei[i][j]=0;

         }

        she=new snake(4,zhanwei);

        shi=new food();

        shi.yes=true;

        zu=new zhangai(5,zhanwei);

        zu.zushu=5;

        xing=true;

        Graphics g = mainp.getGraphics();

        g.clearRect(0,0,380,380);

        direc=3;

        ci=-1;

        flag=0;

        jibie=0;

        biaozhi=0;

        fen=0;

        delay=600;

        she.zou(3);

        t.start();

      }

      else if((""+ke.getKeyChar()).equals("t"))

          {

            ci++;

            if(ci%2==0)

              xing=false;

            else if(ci%2==1)

              xing=true;

          }

      else if((""+ke.getKeyChar()).equals("j"))

        {

            if(delay>=50)

              delay-=50;

        }

      else if((""+ke.getKeyChar()).equals("k"))

        {

              delay+=50;

        }

      }

    public static void main(String str[])

    {

        new tanchi();

    }

}

class snake

{

    int x[];

    int y[];

    int node=4;

    int yipx;

    int yipy;

    int zhan[][];

    public snake(int nod,int[][] zhan)

    { 

            x=new int[nod];

        y=new int[nod];

        this.zhan=zhan;

        for(int i=0;i

         {

          x[i]=190+i*10;

          y[i]=190;

          zhan[x[i]/10][19]=1;

         }

    }

    public int fangxiang(String str)

    {

        int re=0;

        if(str.equals("w"))

           re=1;

        else if(str.equals("s"))

           re=2;

        else if(str.equals("a"))

           re=3;

        else if(str.equals("d"))

           re=4;

        return re;

    }

    public void renode(int laonode,int[] xn,int[] yn)

    { 

            node++;

            x=new int[laonode+1];

        y=new int[laonode+1];

        for(int i=0;i

         {

           x[i]=xn[i];

           y[i]=yn[i];

           zhan[x[i]/10][y[i]/10]=1;

          }

        x[laonode]=yipx;

        y[laonode]=yipy;

    }

    public void zou(int direction)

    {

        int linshi=0;

        zhan[x[node-1]/10][y[node-1]/10]=0;

        if(direction==1)

          {

            linshi=y[0];

            yipx=x[node-1];

            yipy=y[node-1];

            for(int i=node-1;i>0;i--)

             {

                x[i]=x[i-1];

                y[i]=y[i-1];

                zhan[x[i]/10][y[i]/10]=1;

}

            y[0]=linshi-10;

            zhan[x[0]/10][y[0]/10]=1;

}

        else if(direction==2)

         {

          linshi=y[0];

yipx=x[node-1];

          yipy=y[node-1];

for(int i=node-1;i>0;i--)

             {

                x[i]=x[i-1];

                y[i]=y[i-1];

                zhan[x[i]/10][y[i]/10]=1;

}

           y[0]=linshi+10;

           zhan[x[0]/10][y[0]/10]=1;

}

        else if(direction==3)

          {

            linshi=x[0];

yipx=x[node-1];

            yipy=y[node-1];

for(int i=node-1;i>0;i--)

             {

                x[i]=x[i-1];

                y[i]=y[i-1];

                zhan[x[i]/10][y[i]/10]=1;

}

            x[0]=linshi-10;

            zhan[x[0]/10][y[0]/10]=1;

}

        else if(direction==4)

          {

            linshi=x[0];

yipx=x[node-1];

            yipy=y[node-1];

for(int i=node-1;i>0;i--)

             {

                x[i]=x[i-1];

                y[i]=y[i-1];

                zhan[x[i]/10][y[i]/10]=1;

}

             x[0]=linshi+10;

             zhan[x[0]/10][y[0]/10]=1;

}

    }

}

class food

{

    int x;

    int y;

    boolean yes;//判断是否要出现食物的变量

}

class zhangai

{

    int x[];

    int y[];

    int zushu;

    int zhan[][];

    public zhangai(int nod,int[][] zhan)

    { 

        this.zhan=zhan;

        x=new int[nod];

        y=new int[nod];

        for(int i=0;i

         {

           x[i]=-20;

           y[i]=-20;

         }

    }

    public void xiezu(int[] x,int[] y)

    {

        for(int i=0;i

         {

            if(x[i]>10&&y[i]>0)

            zhan[x[i]/10][y[i]/10]=0;

         }

    }

    public void reshu(int za,int px,int py,int sx,int sy)

    { 

        x=new int[za];

        y=new int[za];

        for(int i=0;i

         {

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

           int zux=lix-lix%10;

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

           int zuy=liy-liy%10;

           if(px!=zux&&(px+10)!=zux&&(px-10)!=zux&&(px-20)!=zux&&(px+20)!=zux&&(px-30)!=zux&&(px+30)!=zux&&(py-30)!=zuy&&(py+30)!=zuy&&sx!=zux&&(sx+10)!=zux&&(sx-10)!=zux&&(sx-20)!=zux&&(sx+20)!=zux&&py!=zuy&&(py+10)!=zuy&&(py-10)!=zuy&&(py-20)!=zuy&&(py+20)!=zuy&&sy!=zuy&&(sy+10)!=zuy&&(sy-10)!=zuy&&(sy-20)!=zuy&&(sy-30)!=zuy&&(sy+30)!=zuy&&(sx-30)!=zux&&(sx+30)!=zux&&(sy+20)!=zuy)

            {

                x[i]=zux;

                y[i]=zuy;

                zhan[x[i]/10][y[i]/10]=2;

            }

           else

              {

                x[i]=-20;

                y[i]=-20;

              }

         }

    }

}


原文链接:http://blog.csdn.net/dog250/article/details/5303351
加载中
返回顶部
顶部