学习记录(骑士飞行棋)

game类:

package game02;



import java.util.Scanner;


public class Game {
Player[] player = new Player[2];
Scanner s = new Scanner(System.in);
// Map map;
Map m = new Map();


public void init() {


for (int i = 0; i < player.length; i++) {
System.out.print((i + 1) + "号玩家选择人物1.孙悟空2.猪八戒3.沙僧");
int choose = s.nextInt();
player[i] = new Player();
player[i].setName(getName(choose));
}
m.init();
m.showMap(0, 0);
// s.close();
start();
}


public void start() {
System.out.println("开始游戏了!");
while (player[0].getPoint() <= 99 && player[1].getPoint() <= 99) {


for (int i = 0; i < player.length; i++) {


if (player[i].isPause()) {
System.out.println(player[i].getName() + "停止掷骰子");
player[i].setPause(false);
continue;


}
s.nextLine();
System.out.print(player[i].getName() + "掷骰子     ");


int n = player[i].yacht();
System.out.println(player[i].getName() + "掷骰子值:" + n);
player[i].setPoint(player[i].getPoint() + n);
//如果跑超了 就重新在起点开始
if (player[i].getPoint() > 99) {

System.out.println(player[i].getName() + "跑过去了,重新来过");
/*if (i == 0) {
m.showMap(99, 0);
} else {
m.showMap(0, 99);
}
break;*/
player[i].setPoint(0);
}
if(player[i].getPoint() == 99)
{
System.out.println(player[i].getName() + "获胜");
if (i == 0) {
m.showMap(99, 0);
} else {
m.showMap(0, 99);
}
break;
}
// 判断当前的玩家是否踩到了关卡,进行处理。
int pos = player[i].getPoint();// 当前玩家的位置
int flag = m.map[pos];// 得到地图中当前位置的图标
switch (flag) {
case 0:
common(i);
break;
case 1:
luckyTurn(i);
break;
case 2:
landMine(i);
break;
case 3:
pause(i);
break;
case 4:
timeTunnel(i);
break;
}


m.showMap(player[0].getPoint(), player[1].getPoint());
}
}


}


public String getName(int a) {
String name = null;
switch (a) {
case 1:
name = "孙悟空";
break;
case 2:
name = "猪八戒";
break;
case 3:
name = "沙僧";
break;
}
return name;
}


public void common(int i) {
if (i == 1)
if (player[0].getPoint() == player[i].getPoint()) {


player[0].setPoint(0);
System.out.println("你被" + player[1].getName() + "打回原点");


}
if (i == 0) {
if (player[1].getPoint() == player[i].getPoint()) {
player[1].setPoint(0);
System.out.println("你被" + player[0].getName() + "打回原点");


}
}
}


public void luckyTurn(int i) {
System.out.println("按1与对方玩家交换位置,按2将对方炸到原地");
common(i);
int a = s.nextInt();
if (a == 2) {
if (i == 1) {


player[0].setPoint(0);


}
if (i == 0) {


player[1].setPoint(0);


}
} else {
if (i == 0) {
int ap = player[0].getPoint();
player[0].setPoint(player[1].getPoint());
player[1].setPoint(ap);
} else if (i == 1) {
int ap = player[1].getPoint();
player[1].setPoint(player[0].getPoint());
player[0].setPoint(ap);
}
}
}


public void landMine(int i) {
common(i);
System.out.println(player[i].getName() + "你踩到了地雷");
if (player[i].getPoint() >= 6)
player[i].setPoint(player[i].getPoint() - 6);
else
player[i].setPoint(0);


}


public void pause(int i) {
common(i);
player[i].setPause(true);
}


public void timeTunnel(int i) {
common(i);
System.out.println("恭喜前进10步");
/*if (player[i].getPoint() + 10 > 99)
player[i].setPoint(99);
else
player[i].setPoint(player[i].getPoint() + 10);*/
//可以完全替换是上面的代码   上面会有一个结束重绘过程  所以不需要考虑这个边界问题   
player[i].setPoint(player[i].getPoint() + 10);
}

}


map类:

package game02;


public class Map {
int[] map = new int[100];


public void init() {
// 初始化关卡内容
int[] luckTurn = { 6, 23, 40, 55, 69, 83 };
int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };
int[] pause = { 9, 27, 60, 93};
int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };


// 标识各个关卡的位置
for (int i = 0; i < luckTurn.length; i++) {
int index = luckTurn[i];
map[index] = 1;
}


for (int i = 0; i < landMine.length; i++) {
int index = landMine[i];
map[index] = 2;
}


for (int i = 0; i < pause.length; i++) {
int index = pause[i];
map[index] = 3;
}


for (int i = 0; i < timeTunnel.length; i++) {
int index = timeTunnel[i];
map[index] = 4;
}


}


/**
* 打印图形
*/
// 用于打印第一行和最后一行
public void drawLine(int begin, int end) {


for (int i = begin; i <= end; i++) {
System.out.print(re(map[i]));
}
System.out.println();
}


public void drawLine(int begin, int end, int aPos, int bPos) {


for (int i = begin; i <= end; i++) {
System.out.print(re(map[i], i, aPos, bPos));
}
System.out.println();
}


// 打印右边竖的图形
public void drawRight(int begin, int end) {
for (int j = begin; j <= end; j++) {
for (int i = 1; i <= 95; i++) {
System.out.print(" ");
}
System.out.println(re(map[j]));


}
}


public void drawRight(int begin, int end, int aPos, int bPos) {
for (int j = begin; j <= end; j++) {
for (int i = 1; i <= 30; i++) {
System.out.print(" ");
}
System.out.println(re(map[j], j, aPos, bPos));


}
}


// 打印中间行
public void drawMiddleLine(int begin, int end) {
for (int i = end; i >= begin; i--) {
System.out.print(re(map[i]));
}
System.out.println();
}


public void drawMiddleLine(int begin, int end, int aPos, int bPos) {
for (int i = end; i >= begin; i--) {
System.out.print(re(map[i], i, aPos, bPos));
}
System.out.println();
}


// 打印左边竖的图形
public void drawLeft(int begin, int end) {
for (int i = begin; i < end; i++) {
System.out.println(re(map[i]));
}
}


public void drawLeft(int begin, int end, int aPos, int bPos) {
for (int i = begin; i < end; i++) {
System.out.println(re(map[i], i, aPos, bPos));
}
}


public String re(int flag) {
String i = null;
switch (flag) {
case 0:
i = "∷";
break;
case 1:
i = "¤";
break;
case 2:
i = "★";
break;
case 3:
i = "■";
break;
case 4:
i = "〓";
break;


}
return i;
}


public String re(int flag, int index, int aPos, int bPos) {
String i = null;
if (index == aPos && index == bPos) {
i = "@@";
} else if (index == aPos) {
i = "A";
} else if (index == bPos) {
i = "B";
} else {
i = re(flag);
}


return i;
}
public  void showMap(int aPos,int bPos) {
Map m = new Map();
m.init();
m.drawLine(0, 30, aPos, bPos);
m.drawRight(31, 34, aPos, bPos);
m.drawMiddleLine(35, 65, aPos, bPos);
m.drawLeft(66, 69, aPos, bPos);
m.drawLine(69, 99, aPos, bPos);
}

}

player类:

package game02;


import java.util.Random;


public class Player {
private String name;
private int point;
private boolean isPause = false;


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


public int getPoint() {
return point;
}


public void setPoint(int point) {
this.point = point;
}


public boolean isPause() {
return isPause;
}


public void setPause(boolean isPause) {
this.isPause = isPause;
}


public Player() {


}


public Player(String name, int point, boolean isPause) {
super();
this.name = name;
this.point = point;
this.isPause = isPause;
}


public int yacht() {
Random r = new Random();
int a = r.nextInt(6) + 1;
return a;
}

}


test类:

package game02;






public class Test {


public static void main(String[] args) {
Game game=new Game();
game.init();
//game.start();





/*Map m = new Map();

* map初始化
 
m.init();

* 画出map
 

* m.drawLine(0,30); m.drawRight(31, 34); m.drawMiddleLine(35, 65);
* m.drawLeft(66, 69); m.drawLine(69, 99);
 


int aPos = 0;
int bPos = 0;
m.drawLine(0, 30, aPos, bPos);
m.drawRight(31, 34, aPos, bPos);
m.drawMiddleLine(35, 65, aPos, bPos);
m.drawLeft(66, 69, aPos, bPos);
m.drawLine(69, 99, aPos, bPos);
System.out.println("开始游戏了!");
Test test=new Test();
test.showMap(0,0);

* 用户输入
 
//Scanner s=new Scanner(System.in);
for(int i=0;i<3;i++)
{
System.out.println("A玩家掷骰子");
Player p = new Player();
int a = p.yacht();
aPos =a;
System.out.println("掷骰子数"+a);
test.showMap(aPos, bPos);
System.out.println("B玩家掷骰子");
int b = p.yacht();
bPos =b;
System.out.println("掷骰子数"+b);
test.showMap(aPos, bPos);

}*/

/*
* 骰子测试
*/
/*for (int i = 0; i < 10; i++) {
Player p = new Player();
int a = p.yacht();
System.out.println(a);
}*/


}


/*
* 调用新函数测试玩家
*/
/*public  void showMap(int aPos,int bPos) {
Map m = new Map();
m.init();
m.drawLine(0, 30, aPos, bPos);
m.drawRight(31, 34, aPos, bPos);
m.drawMiddleLine(35, 65, aPos, bPos);
m.drawLeft(66, 69, aPos, bPos);
m.drawLine(69, 99, aPos, bPos);


}*/


}

你可能感兴趣的:(学习记录(骑士飞行棋))