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 是一个布尔式,? 疑问,如果是真,返回:前面的值,如果假,:后面的值
mapBuff = i == 0 ? "C" : "P";
changMap(players[i].getPosition(), mapBuff);
}
map.showMap();
}
}
}
/**
* 判断是否踩中对方
* @param first 前面玩家
* @param second 后面玩家
*/
public boolean isHit(Player first,Player second) {
boolean temp = false;
if (first.getPosition() == second.getPosition()) {
temp = true;
}
return temp;
}
/**
* 玩家掷点阻塞
* @param player 玩家信息
*/
public void letPlayerRoll(Player player) {
System.out.println("请玩家 " + player.getName() + " 掷点~");
sc.next();
}
/**
* 检查玩家到达的地图位置是否有特殊效果
* @param player 玩家
* @param mapBuff 地图标识
* @return执行过buff后的玩家对象
*/
public Player checkBuff(Player player,String mapBuff) { if ("-".equals(mapBuff)) {
System.out.println(player.getName()+ " 进入黑洞,迷失了方向,后退6步");
System.out.println(player.getName() + ":shit!");
player.setPosition(player.getPosition() - 6);
}else if ("+".equals(mapBuff)) {
System.out.println(player.getName() + " 进入时空隧道,前进6步");
System.out.println(player.getName() + ":luckily!");
player.setPosition(player.getPosition() + 6);
}else if ("*".equals(mapBuff)) {
System.out.println(player.getName() + " 进行了空间跳跃~再来一次");
System.out.println(player.getName() + ":see me fly!");
player.setStatus(0);
}else if ("^".equals(mapBuff)) {
System.out.println(player.getName() + " 抛锚了,暂停一次");
System.out.println(player.getName() + ":what is the fuck!");
player.setStatus(1);
}
return player;
}
/**
* 改变地图上玩家的位置
* @param position 位置
* @param flag 地图形状
*/
public void changMap(int position, String flag) {
if (position < 31) {
map.map[0][position - 1] = flag;
}else if (position > 30 && position < 36) {
map.map[position - 30][29] = flag;
}else if (position > 35 && position < 66) {
map.map[6][position - 35] = flag;
}else if (position > 65 && position < 71) {
map.map[position - 59][0] = flag;
}else if (position > 70 && position < 101) {
map.map[12][position - 71] = flag;
}
}
/**
* 暂停言语
* @param player 被暂停的玩家
*/
public void statusSay(Player player) {
System.out.println(player.getName() + " 暂停中...........");
}
/**
* 获得地图指定位置的形状
* @param position 位置
* @return
*/
public String getMapFlag(int position) {
String flag = "=";
if (position < 31) {
flag = map.map[0][position - 1];
}else if (position > 30 && position < 36) {
flag = map.map[position - 30][29];
}else if (position > 35 && position < 66) {
flag = map.map[6][65 - position];
}else if (position > 65 && position < 71) {
flag = map.map[position - 59][0];
}else if (position > 70 && position < 101) {
flag = map.map[12][position - 71];
}
return flag;
}
/**
* 胜利标语
* @param player 玩家
*/
public void gameOver(Player player) {
System.out.println("whar a palyer!!");
System.out.println(" 玩家 " + player.getName() + " 率先到达终点,获得了胜利");
}
/**
* 判断是否胜利
* @param position 位置
* @return boolean,temp
*/
public boolean checkAnyoneWin(int position) {
boolean temp = false;
temp = position >= 100 ? true : false;
return temp;
}
/**
* 掷点
* @return int,count 点数
*/
public int roll () {
int count = 0;
//产生一个6以内的随机数
Random random = new Random();
count = random.nextInt(6) + 1;
return count;
}
/**
* 选择角色
* @return Player [],players 玩家对象数组
*/
public Player [] getPlayer(){
boolean flag = true;
//创建对象数组,长度为2,用来接收玩家对象和电脑
Player [] players = new Player[2];
Player player = new Player();
player.setNum(1);
Player computer = new Player();
while (flag) {
String userChoose = sc.next();
//获取输入内容,判断是否 1,2,3,根据选择给玩家对象赋名
if (!userChoose.matches("[1-3]")) {
System.out.println("→ 选择角色失败,请重新选择");
} else {
switch (Integer.parseInt(userChoose)) {
case 1:
player.setName("YaGaMi");
break;
case 2:
player.setName("Killer");
break;
case 3:
player.setName("Chou");
break;
default:
break;
}
System.out.println("→ 你选择了 " + player.getName() + " 作为你的游戏角色");
System.out.println("→ 电脑选择了 Fujiwara no Mokou 作为游戏角色" );
computer.setName("Fujiwara no Mokou");
//数组第1位是玩家,第二位是电脑
players[1] = player;
players[0] = computer;
flag = false;
}
}
return players;
}
public void welcome() {
System.out.println("*********************************");
System.out.println("*******欢迎来到飞行棋小游戏*******");
System.out.println("*********************************");
System.out.println();
System.out.println("游戏说明:");
System.out.println("地图上随机出现 * - ^ + 四种效果");
System.out.println("分别代码:再掷1次,后退6步,暂停1次,前进6步");
System.out.println();
System.out.println("→ 请选择你的喜欢的游戏角色编号:");
System.out.println("1.YaGaMi");
System.out.println("2.Killer");
System.out.println("3.Chou");
}
public static void main(String[] args) {
new Game().GameStart();
}
}
package chou.game.flying;
public class Map {
public String [][] map = new String[13][30];
public void initMap() {
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[i].length; j++) {
if(i == 0 || i == 6 || i == 12 || (i < 6 && j == 29) || (i > 6 && j == 0)){
map[i][j] = "=";
}else {
map[i][j] = " ";
}
}
}
map[0][6] = "+";
map[0][8] = "-";
map[0][15] = "*";
map[0][20] = "-";
map[0][29] = "^";
map[3][29] = "*";
map[6][7] = "^";
map[6][16] = "+";
map[6][20] = "-";
map[6][28] = "^";
map[10][0] = "*";
map[12][7] = "-";
map[12][8] = "^";
map[12][15] = "-";
map[12][20] = "^";
map[12][23] = "-";
map[12][28] = "-";
}
public void showMap(){
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[i].length; j++) {
if(i == 6){
System.out.print(map[i][29-j] + " ");
}else {
System.out.print(map[i][j] + " ");
}
}
System.out.println();
}
}
public static void main(String[] args) {
}
}
package chou.game.flying;
public class Player {
private String name;
//玩家状态
private int status;
//玩家当前位置
private int position;
//玩家上把位置
private int lastPosition;
//玩家上把位置的地图形状
private String lastPositionFlag;
//玩家编号
private int num;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
= name;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public int getPosition() {
return position;
}
public void setPosition(int position) { this.position = position;
}
public int getLastPosition() {
return lastPosition;
}
public void setLastPosition(int lastPosition) { stPosition = lastPosition;
}
public String getLastPositionFlag() {
return lastPositionFlag;
}
public void setLastPositionFlag(String lastPositionFlag) { stPositionFlag = lastPositionFlag;
}
}。