java骑士飞行棋 小游戏

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 是一个布尔式,? 疑问,如果是真,返回:前面的值,如果假,:后面的值

相关文档
最新文档