JAVA课程之贪吃蛇实现

来源:互联网新闻 编辑:余姚网 时间:2021/03/09 00:26
逍遥码者
微信号:coderhythm

我们专注于更有逼格的coding

 

更文艺范的coding

 

本着人道精神,头像右上角数字可删除

 

晓与大家聊JAVA

 

 

 

晓与大家聊JAVA---从贪吃蛇说起

笔者带来的主要是Java系列课程,本期先从一个经典游戏-贪吃蛇开始讲起,后续更精彩!敬请关注!

        

        

不废话,来干货

 JAVA可以算是我的程序之路的启蒙语言,虽然在学校课堂上真心没学过JAVA,之所以这么说其实课堂上学的除了我知道能叫得上名字的课名如C、C++之外,内容都已经还给老师了。

 

要说为什么要选择JAVA,那就是因为我买不起苹果。

 

 其实还是安卓的开源吸引了我。到目前为止,目测这波不亏。

 

JAVA语言作为目前使用量最大的语言,毫无疑问未来前景依旧风光。

 

为什么这么说呢,当然一个很重要的原因是因为我学了。

其实主要是目前已有的大部分大型web项目都离不开JAVA的身影,当然还有我可爱的google安卓系统(虽然目前被迫只能使用JAVA的openapi),其实我感兴趣的还有物联网的应用部分。

这里我想说一下我学习JAVA的整个过程,这里只说基础部分,当然我也不是什么高手所以这篇文章针对的群体应该是初学者。

最开始我也会搜索各种学习方法,入了很多坑,但是幸好我最后选了个正确的学习视频。不得不说,好老师为什么叫好老师总是有原因的。链接如下:

斯坦福:编程方法学

好的老师会带动你的兴趣,差的老师可以磨灭你的兴趣,而兴趣决定你能否深入,高下立现。

这里我分享一个贪吃蛇的代码(初学时写的,当然也有参考),相信可以让大家对学习JAVA有更好的兴趣,并且懂代码的大家都可以交流。

运行结果图示:

首先是总frame类:

package tanchi; import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.ArrayList; public class Tanchishe extends Frame { public final static int GAME_WIDTH = 400; public final static int GAME_HEIGHT = 520; Image offScreenImage = null; She she = new She(160, 80, She.Direction.R, this); ArrayList shiwu = new ArrayList(); public void paint(Graphics g) { if (shiwu.size() <= 1) { shiwu.add(new Shiwu()); } she.draw(g); for (int i = 0; i < 1; i++) { shiwu.get(i).draw(g); } } public void update(Graphics g) { if (offScreenImage == null) { offScreenImage = this.createImage(GAME_WIDTH, GAME_HEIGHT); } Graphics Goffscreen = offScreenImage.getGraphics(); Color c = Goffscreen.getColor(); Goffscreen.setColor(Color.green); Goffscreen.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT); Goffscreen.setColor(c); paint(Goffscreen); g.drawImage(offScreenImage, 0, 0, null); } public void launchFrame() { this.setLocation(200, 100); this.setSize(GAME_WIDTH, GAME_HEIGHT); this.setTitle("贪吃蛇"); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); this.setResizable(false); this.setBackground(Color.green); this.addKeyListener(new KeyMonitor()); setVisible(true); PaintThread it = new PaintThread(); Thread rd = new Thread(it); rd.start(); if (shiwu.size() <= 1) { shiwu.add(new Shiwu()); } } public static void main(String[] args) { Tanchishe tw = new Tanchishe(); tw.launchFrame(); } public class PaintThread implements Runnable { public void run() { while (true) { repaint(); try { Thread.sleep(380); } catch (InterruptedException e) { System.out.println("Wrong"); } } } } private class KeyMonitor extends KeyAdapter { public void keyPressed(KeyEvent e) { she.keyPressed(e); } public void keyReleased(KeyEvent e) { she.keyReleased(e); } } }

其次是蛇的类:

package tanchi; import java.awt.Color; import java.awt.Graphics; import java.awt.event.KeyEvent; public class She { public final static int X_SPEED=20; public final static int Y_SPEED=20; public final static int TANK_W=20; public final static int TANK_H=20; public int x,y; public boolean bU=false,bD=false,bR=false,bL=false; int len=5; int score=0; enum Direction{ L,R,D,U } private Direction dir=Direction.R; Tanchishe tcs; int[][] wz=new int[len][2]; public She(int x,int y){ this.x=x; this.y=y; int m=x-20*len; for(int i=0;i=wz[len-1][0]&&(tcs.shiwu.get(0).x)<=(wz[len-1][0]+10)&&(tcs.shiwu.get(0).y)>=wz[len-1][1]&&(tcs.shiwu.get(0).y)<=(wz[len-1][1]+10)){ tcs.shiwu.remove(tcs.shiwu.get(0)); bianhua(); } switch(dir){ case L:  if(wz[len-1][0]<=wz[len-2][0]){ for(int i=0;i=wz[len-2][0]){ for(int i=0;i400){ wz[len-1][0]=0; bianjie(); } } break; case D: if(wz[len-1][1]>=wz[len-2][1]){ for(int i=0;i520){ wz[len-1][1]=20; bianjie(); } }break; case U: if(wz[len-1][1]<=wz[len-2][1]){ for(int i=0;i

package tanchi; import java.awt.Color; import java.awt.Graphics; import java.util.Random; public class Shiwu { public final static int TANK_W=20; public final static int TANK_H=20; double x,y; public Shiwu(){ Random ran=new Random(); x=ran.nextInt(10)*20; y=ran.nextInt(10)*20+20; } public void draw(Graphics g){ Color c=g.getColor(); g.setColor(Color.red); g.fillRect((int)x,(int)y,TANK_W,TANK_H); g.setColor(c); } } 以上三个文件就是当时写的贪吃蛇的所有代码,写的很简单,还有汉语拼音的方法,没有自身的碰撞检测和边界的碰撞检测,但是这样才能真正实现一会走成一个“2”字,一会走成一个“B”字。

 

Talk is cheap show me the code!

 

下一期课程......还是让晓这个神秘的男人亲自告诉你们吧......。

我们后续会依次推出Redis/Memcache、PHP以及其CI框架使用、svn/git使用、消息队列使用、RPC使用、GO语言入门、树莓派走起(主要以python进行讲解)、前端js框架Jquery以及端上框架Zepto、H5等相关内容;同时为了提升大家的文艺气息,笔者会时不时插入几节非洲鼓教学。记住我们的口号:

我们专注于更有逼格的coding

更文艺范的coding

 

点击下方“阅读原文”查看更多