那些年接下来的课程就是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.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