贪吃蛇游戏的java源码
来源:互联网 发布:云计算为什么这么火 编辑:程序博客网 时间:2024/05/15 14:39
这里我把贪吃蛇的java源码粘出来,有兴趣的可以看看,如果要看具体的思路,点击下面的连接:
http://blog.csdn.net/angellover2017/article/details/72813957
snakegame.java
package snakegame;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Point;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.util.LinkedList;import java.util.Random;import java.util.Scanner;import javax.swing.JFrame;import javax.swing.JPanel;public class SnakeGame_1 extends JPanel{ /** * */ private static final long serialVersionUID = 1L; //常量,表示地图的宽和高 protected static final int HEIGHT=30; protected static final int WIDTH=30; //常量,表示每个方格的宽和高 protected static final int CELL_H=20; protected static final int CELL_W=20; //常量,表示蛇的方向 protected static final int UP_DIRECTION=1; protected static final int DOWN_DIRECTION=-1; protected static final int LEFT_DIRECTION=2; protected static final int RIGHT_DIRECTION=-2; //当前方向,默认为右方 private int currentdirection=RIGHT_DIRECTION; //char型数组来储存地图 protected char[][] map=new char[HEIGHT][WIDTH]; //容器,用来储存蛇的坐标信息 private LinkedList<Point> snake=new LinkedList<Point>(); //食物的坐标用Point类来储存 private Point food=new Point(); //用来判断游戏是否结束 protected static boolean GameOver=false; protected static boolean IsAuto=true; private static int Difficult_Degree=1; private Scanner in;/* 图形刷新区 */ //重写Paint方法 @Override public void paint(Graphics g) { //画地图 for(int i=0;i<HEIGHT;i++) for(int j=0;j<WIDTH;j++) { if(map[i][j]=='*'){ g.setColor(Color.GRAY); }else{ g.setColor(Color.WHITE); } g.fill3DRect(j*CELL_W, i*CELL_H, CELL_W, CELL_H, true); } //画蛇 //定位蛇头 int W=snake.getFirst().x; int H=snake.getFirst().y; g.setColor(Color.RED); g.fill3DRect(W*CELL_W,H*CELL_H , 20, 20,true); //定位蛇身 for(int t=1;t<this.snake.size();t++) { W=snake.get(t).x; H=snake.get(t).y; g.setColor(Color.GREEN); g.fill3DRect(W*CELL_W,H*CELL_H , 20, 20,true); } //画食物 map[food.y][food.x]='@'; g.setColor(Color.BLUE); g.fill3DRect(food.x*CELL_W, food.y*CELL_H, 20, 20, true); //画字 if(SnakeGame_1.GameOver){ g.setColor(Color.ORANGE); g.setFont(new Font("宋体", Font.BOLD,30 )); g.drawString("GAMW OVER !", CELL_W*(WIDTH/2), CELL_H*(HEIGHT/2)); }}/* 初始化地图、蛇、食物函数区 */ //初始化Map public void intiMap() { for(int i=0;i<HEIGHT;i++) for(int j=0;j<WIDTH;j++) { if(i==0||(i==HEIGHT-1)){ map[i][j]='*'; } else this.map[i][j]=' '; } } //初始化snake public void intiSnake(){ int x=WIDTH/2; int y=HEIGHT/2; snake.addFirst(new Point(x-1,y)); snake.addFirst(new Point(x, y)); snake.addFirst(new Point(x+1,y)); } //初始化食物 public void intiFood(){ while(true){ Random random=new Random(); int x=random.nextInt(WIDTH-1); int y=random.nextInt(HEIGHT-1); if(map[y][x]!='*'&&map[y][x]!='#'&&map[y][x]!='$') { food.x=x; food.y=y; break; } } }/* 蛇移动函数区 */ //run函数,蛇自己走 public void runAuto() throws InterruptedException{ while (true){ move(); IsOver(); reFresh(); repaint(); if(GameOver){ repaint(); } Thread.sleep(1000/Difficult_Degree); } } //蛇移动函数 public void move(){ //取蛇头 Point snakehead=snake.getFirst(); //依据方向,移动 switch(currentdirection){ //向上移动 case UP_DIRECTION : //结束的时候不执行添加头结点 if(!GameOver){ snake.addFirst(new Point(snakehead.x,snakehead.y-1)); } break; //向下移动 case DOWN_DIRECTION : //结束的时候不执行添加头结点 if(!GameOver){ snake.addFirst(new Point(snakehead.x,snakehead.y+1)); } break; //向左移动 case LEFT_DIRECTION : if(!GameOver){ if(snakehead.x==0){ snake.addFirst(new Point(snakehead.x-1+WIDTH,snakehead.y)); }else{ snake.addFirst(new Point(snakehead.x-1,snakehead.y)); } } break; //向右移动 case RIGHT_DIRECTION : if(!GameOver){ snake.addFirst(new Point((snakehead.x+1)%WIDTH,snakehead.y)); } break; default : break; } if(eatFood()){ //先刷新,防止出现食物长到身上 repaint(); //重建食物 intiFood(); }else{ //游戏结束的时候不执行删除尾节点 if(!GameOver){ //删除蛇尾 snake.removeLast(); } } } //改变蛇的方向 public void changeDirection(int newDirection){ if(newDirection+currentdirection!=0){ currentdirection=newDirection; } } //蛇吃食物区 public boolean eatFood(){ //取蛇头 Point snakehead=snake.getFirst(); if(snakehead.equals(food)){ return true; } return false; }/* 刷新区 */ public void reFresh(){ //刷新地图 intiMap(); //刷新蛇 showSnake(); //刷新食物 showFood(); /*//显示当前地图 //showMap();*/ }/* 打印函数区*/ //打印输出地图 /* public boolean showMap(){ { for(int i=0;i<HEIGHT;i++){ for(int j=0;j<WIDTH;j++) { System.out.print(this.map[i][j]); } System.out.println(); } return true; } }*/ //在地图上显示蛇 public boolean showSnake(){ { //定位蛇头 int W=snake.getFirst().x; int H=snake.getFirst().y; map[H][W]='$'; //定位蛇身 for(int i=1;i<this.snake.size();i++) { W=snake.get(i).x; H=snake.get(i).y; map[H][W]='#'; } return true; } } //在地图上显示食物 public boolean showFood(){ { map[food.y][food.x]='@'; return true; } }/* 设置游戏难度区 */ public void set_Difficuty(){ System.out.println("请输入难度系数(1——10)"); in = new Scanner(System.in); Difficult_Degree=in.nextInt(); }/* 结束游戏区 */ public void IsOver(){ //取蛇头 Point snakehead=snake.getFirst(); //撞墙死 if(map[snakehead.y][snakehead.x]=='*'){ GameOver=true; } //咬到自己死 if(map[snakehead.y][snakehead.x]=='#'){ GameOver=true; } } public static void main(String[] args) throws InterruptedException {//字符界面 /* SnakeGame sg=new SnakeGame(); sg.intiMap(); sg.intiSnake(); sg.intiFood(); sg.showSnake(); sg.showFood(); sg.showMap(); JFrame frame=new JFrame("方向盘"); frame.setSize(300, 300); frame.add(new JButton("↑"),BorderLayout.NORTH); frame.add(new JButton("↓"),BorderLayout.SOUTH); frame.add(new JButton("←"),BorderLayout.WEST); frame.add(new JButton("→"),BorderLayout.EAST); JButton jbcenter=new JButton("按下此键可控制蛇"); frame.add(jbcenter, BorderLayout.CENTER); jbcenter.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { super.keyPressed(e); switch(e.getKeyCode()){ case KeyEvent.VK_UP: sg.changeDirection(UP_DIRECTION); break; case KeyEvent.VK_DOWN: sg.changeDirection(DOWN_DIRECTION); break; case KeyEvent.VK_LEFT: sg.changeDirection(LEFT_DIRECTION); break; case KeyEvent.VK_RIGHT: sg.changeDirection(RIGHT_DIRECTION); break; default: break; } sg.move(); sg.IsOver(); sg.reFresh(); if(SnakeGame.GameOver){ System.out.println("game is over"); System.exit(0); } } }); frame.setVisible(true); *///图形界面 SnakeGame_1 sg1=new SnakeGame_1(); sg1.set_Difficuty(); JFrame frame1=new JFrame("贪吃蛇"); frame1.setSize(CELL_W*WIDTH+20, CELL_H*HEIGHT+45); frame1.setVisible(true); frame1.add(sg1); sg1.intiMap(); sg1.intiSnake(); sg1.intiFood(); sg1.repaint(); //为窗口添加监听器 frame1.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { super.keyPressed(e); switch(e.getKeyCode()){ case KeyEvent.VK_UP: IsAuto=false; sg1.changeDirection(UP_DIRECTION); break; case KeyEvent.VK_DOWN: IsAuto=false; sg1.changeDirection(DOWN_DIRECTION); break; case KeyEvent.VK_LEFT: IsAuto=false; sg1.changeDirection(LEFT_DIRECTION); break; case KeyEvent.VK_RIGHT: IsAuto=false; sg1.changeDirection(RIGHT_DIRECTION); break; default: break; } sg1.move(); sg1.IsOver(); sg1.reFresh(); sg1.repaint(); if(SnakeGame_1.GameOver){ sg1.repaint(); /* // System.exit(0);*/ } IsAuto=true; } }); //如果IsAuto 为真,则自己走 if(IsAuto)sg1.runAuto(); }}
阅读全文
1 0
- 贪吃蛇游戏的java源码
- 贪吃蛇游戏源码
- Java贪吃蛇游戏
- Java贪吃蛇游戏
- java贪吃蛇游戏
- [OpenGL]贪吃蛇游戏源码
- 贪吃蛇游戏源码设计
- 分享贪吃蛇游戏源码
- HTML5游戏源码《贪吃蛇》
- 用java写的贪吃蛇游戏
- java写的简易贪吃蛇游戏
- Java控制台下的贪吃蛇游戏
- 用java写的贪吃蛇游戏
- Java之贪吃蛇游戏的开发
- 贪吃蛇的游戏
- Java贪吃游戏的实现
- Java贪吃游戏的实现!
- JAVA实现贪吃蛇游戏
- Android Studio中各种jdk和sdk的类找不到,提示setup jdk
- asdas
- AOJ-problem-874
- MyFlag Step9 :Flag功能相关的设计
- 文章标题
- 贪吃蛇游戏的java源码
- 简单的文本查询和替换小例子
- 兔子问题
- 图解HTTP
- linux常用命令
- MySQL日志文件的开启与参数详解
- 毕业后五年,你会在哪里…
- 关键字之运算符
- C 提高之变量和指针