java骑士飞行棋 小游戏
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
突然想起自己刚学java时,老师让写一个java骑士飞行棋,那时候还不知道写,到处问人,勉强写好了,结果全是放在主函数里,今天闲来没事,花了一会,再次写了个骑士飞行棋小游戏,希望对初学者有帮助吧。
代码中,可能用到了初学者还没接触到的东西,不过都不难,注释都有写明,花点时间就能明白的。
一共三个类。
分别:
Game.java
Map.java
Player.java
package chou.game.flying;
import java.util.Random;
import java.util.Scanner;
public class Game {
private Scanner sc = new Scanner(System.in);
private static Map map = new Map();
/**
* 静态块,初始化地图
* 加载时就会被执行的内容
* 不理解的,可以在static{}块里打印一句话,看看控制台反映
*/
static {
map.initMap();
}
/**
* 游戏开始
*/
public void GameStart() {
//游戏开始界面
welcome();
//选择角色,生成对象数组
Player [] players = getPlayer();
//游戏开始循环,直到有玩家胜出,结束
boolean isAnyoneWin = false;
while (!isAnyoneWin) {
//遍历玩家数组,让每个玩家依次进行掷点
for (int i = 0; i < players.length; i++) {
//对玩家的状态进行判断,是否处于暂停状态
if (players[i].getStatus() == 1) {
//如果玩家处于暂停状态,恢复暂停状态并跳过此回合
players[i].setStatus(0);
statusSay(players[i]);
continue;
}
//判断玩家,手动掷点
if (i != 0) {
letPlayerRoll(players[i]);
}
//进行掷点
int count = roll();
System.out.println(players[i].getName() + " 掷出了 " + count + " 点");
//记录玩家roll点前位置和roll点后位置,判断玩家位置是否到达终点
players[i].setLastPosition(players[i].getPosition());
players[i].setPosition(players[i].getPosition() + count);
//判断是否踩中对方
int secondNum = Math.abs(1 - i);
if (isHit(players[i], players[secondNum])) {
players[secondNum].setPosition(0);
if (players[i].getLastPosition() != 0) {
changMap(players[i].getLastPosition(),
players[i].getLastPositionFlag());
}
}
if (checkAnyoneWin(players[i].getPosition())) {
isAnyoneWin = true;
//打印游戏结束标语
gameOver(players[i]);
continue;
}else {
//判断将去位置是否有特殊效果,判断效果之后,理论上来说,应该再次进行判断是否有特殊效果
//但我们这里不设这种情出现,因为再来循环的话,代码会更复杂,不利于初学者学习
//在这里,我们只判断再进行一次roll点的判定
String mapBuff = null;
mapBuff = getMapFlag(players[i].getPosition());
if (!("=".equals(mapBuff))) {
players[i] = checkBuff(players[i], mapBuff);
}else if ("*".equals(mapBuff)) {
count = roll();
players[i].setPosition(players[i].getPosition() + count);
}
//判断是否踩中对方
secondNum = Math.abs(1 - i);
if (isHit(players[i], players[secondNum])) {
players[secondNum].setPosition(0);
if (players[i].getLastPosition() != 0) {
changMap(players[i].getLastPosition(), players[i].getLastPositionFlag());
}
}
//记录玩家去的位置的形状,地图复原使用
mapBuff = getMapFlag(players[i].getPosition());
players[i].setLastPositionFlag(mapBuff);
//改变地图上玩家的位置,先复原,再改变
//初始位置是为0,所以要判断
if (players[i].getLastPosition() != 0) {
changMap(players[i].getLastPosition(),
players[i].getLastPositionFlag());
}
//三目运算符,i == 0 是一个布尔式,? 疑问,如果是真,返回:前面的值,如果假,:后面的值