那些年,我还在学习java (一)

2014-11-24 07:23:35 · 作者: · 浏览: 3

那些年接下来的课程就是java、jsp了,java语言还是很好的,对于我个人而言,只是对它的开发工具不是很满意,就是智能感应还没有自已敲来得快,当然这也是小事;在此已经了解了很多语言了,从C/C++到C#,现在开始学习另一门面向对象的语言,那就是java了,还是从基础开始,数据类型、读取文件、线程、网络编程、图形开发,applet等,还有java有很多包,比如说读取文件的三方包,等到了jsp时,还有javabean、servlet,后面还有SSH,这些内容也不是很多,当然今天只是java,将以一个游戏来完结它,下面来看一看吧。
这是一个很老的游戏—贪吃蛇,简单说一下这个游戏是怎么设计的:由一个主类作为游戏运行的入口,将贪吃蛇分为头、身二个类,还有一个食物类,主类继承自Frame类,通过键盘监听来完成蛇的移动,同时身体也跟着移动,当蛇头撞到食时,身体加增长,食物消,随机生成下一个食物,游戏继续,当蛇头撞到蛇身时,游戏结束,下面看一下代码吧!
1、蛇头类SnakeHead

public class SnakeHead {

/************ 属性区 **************/

/**

* 蛇头的每一节的坐标

*/

public int snakeHeadX;

public int snakeHeadY;

/**

* 蛇头的宽高,由于是正方形,所以宽高一样

*/

public int snakeBodyWidthHeight = 20;

/**

* 蛇头的颜色

*/

public Color color = Color.red;

/**

* 蛇移动的方向,让蛇头自动移动,上、下、左、右

*/

public boolean directionUp, directionDown, directionLeft, directionRight;

/**

* 得到控制台的引用

*/

public SnakeStart snakeStart = null;

/**

* 游戏是否结束

*/

public boolean snakeDead = false;

/**

* 玩家的得分数

*/

public int score = 0;



/************** 方法区 ******************/

/**

* constructor

*

* @param snakeBodyX

* @param snakeHeadY

* @param color

*/

public SnakeHead(int snakeHeadX, int snakeHeadY, SnakeStart snakeStart) {

this.snakeHeadX = snakeHeadX;

this.snakeHeadY = snakeHeadY;

this.snakeStart = snakeStart;

directionRight = true;

}

/**

* 画出蛇头 *

* @param g 画笔,向控制台画出蛇身

*/

public void drawSnakeHead(Graphics g) {

g.setColor(Color.BLACK);

g.drawString("你的得分score:"+score, 10, 50);

g.setColor(Color.darkGray);

g.drawRect(snakeHeadX, snakeHeadY, snakeBodyWidthHeight,

snakeBodyWidthHeight);

g.setColor(color);

g.fillRect(snakeHeadX, snakeHeadY, snakeBodyWidthHeight,

snakeBodyWidthHeight);

if (!snakeDead)

autoMoveSnakeHead();

}

/**

* 蛇头的移动,并且吃食物

*/

public void moveSnakeHead(int snakeBodyX, int snakeBodyY) {



// 移动蛇头

this.snakeHeadX += snakeBodyX;

this.snakeHeadY += snakeBodyY;

if (this.snakeHeadX < 0) {

this.snakeHeadX = snakeStart.frameWidth - 20;

}

if (this.snakeHeadX > snakeStart.frameWidth - 20) {

this.snakeHeadX = 0;

}

if (this.snakeHeadY < 15) {

this.snakeHeadY = snakeStart.frmaeHeight - 20;

}

if (this.snakeHeadY + 20 > snakeStart.frmaeHeight) {

this.snakeHeadY = 25;

}

snakeDead();

eatFood();

}

/**

* 吃食物,通过二种检测的方式,对食物进行检测,完善BUG

*/

public void eatFood() {

if ((this.snakeHeadX == snakeStart.snakeFood.snakeFoodX && this.snakeHeadY == snakeStart.snakeFood.snakeFoodY)

|| this.getRectangle().intersects(

snakeStart.snakeFood.getRectangle())) {

snakeStart.snakeFood.isSnakeBody = true;

score+=10;

snakeStart.snakeBody.snakeBody.add(snakeStart.snakeFood);

snakeStart.hasFood = false;

}

}

/**

* 判断蛇是否死了,结束游戏

*/

public void snakeDead() {

for (int i = 0; i < snakeStart.snakeBody.snakeBody.size(); i++) {

if (this.snakeHeadX == snakeStart.snakeBody.snakeBody.get(i).s