Java编写的(骑士)飞行棋

 
 

采用 100 格小型游戏棋盘
游戏规则:对战双方轮流掷骰子控制自己的骑兵前进或后退,在游戏棋盘上设置有关卡
普通
地雷
暂停
时空隧道
幸运轮盘(提供两种运气:交换位置和轰炸)

     棋盘上的关卡只在骑兵第一次移动遇到时有效

根据需求分析对象
对战地图类( Map

    功能:在控制台显示棋盘,并显示当前玩家在棋盘中所处的位置

 

游戏类( Game

   功能:实现游戏初始化设置、展示游戏开始界面以及角色设置、控制游戏进度、实现游戏规则、以及游戏结束后结果评判

测试类( StartGame

     功能:启动游戏


构造地图类

package come.igeek;


public class Map {
int[] map = new int[100];
public void init(){

int[] luckyTurn = {6, 23, 40, 55, 69, 83}; //幸运轮盘        1
int[] landMine = {5, 13, 17, 33, 38, 50, 64, 80, 94};   //地雷位置 2
int[] pause = {9, 27, 60, 93};         //暂停                        3
int[] timeTunnel = {20, 25, 45, 63, 72, 88, 90};   //时空隧道    4

for(int i=0;i<luckyTurn.length;i++){
int index =luckyTurn[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;
}
showMap(0,0);
}
public void drawLine(int begin,int end){//上下
for( int i=begin;i<=end;i++){
System.out.print(getGraphics(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(getGraphics(map[i],i,aPos,bPos));
}
System.out.println();
}
public void drawRight(int begin,int end){//右边
for(int i=begin;i<=end;i++){
for(int j=1;j<=109;j++){System.out.print(" ");}//打空格
System.out.println(getGraphics(map[i]));
}

}
public void drawRight(int begin,int end,int aPos,int bPos){//右边重载
for(int i=begin;i<=end;i++){
for(int j=1;j<=109;j++){System.out.print(" ");}
System.out.println(getGraphics(map[i],i,aPos,bPos));
}

}
public void drawMiddleLine(int begin,int end){//中间
for(int i=end;i>=begin;i--){
System.out.print(getGraphics(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(getGraphics(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(getGraphics(map[i]));
}
}
public void drawLeft(int begin,int end,int aPos,int bPos){//左边重载
for(int i=begin;i<=end;i++){
System.out.println(getGraphics(map[i],i,aPos,bPos));
}
}
public void showMap(int aPos,int bPos){//地图显示

drawLine(0, 30,aPos,bPos);
drawRight(31, 34,aPos,bPos);
drawMiddleLine(35, 65,aPos,bPos);
drawLeft(66, 69,aPos,bPos);
drawLine(70, 99,aPos,bPos);
}
public String  getGraphics(int flag){//数字换成图像
String icon=null;
if(flag==0){icon="∷";}
else if(flag==1){icon="¤";}
else if(flag==2){icon="★";}
else if(flag==3){icon="■";}
else{ return icon="〓";}
return icon;
}
/**

* @param flag   当前格子表示
* @param index当前格子下标
* @param aPos A的位置
* @param bPos B的位置
* @return
*/
public String getGraphics(int flag,int index,int aPos,int bPos){//数字换图像重写
String icon=null;
if(index==aPos&&index==bPos){
icon="@@";
}else if(index==aPos){
icon="A";
}else if(index== bPos){
icon="B";
}else{
icon=getGraphics(flag);
}
return icon;
}

}


构造玩家类

package come.igeek;


import java.util.Random;


public class Player {
private String name;
private int point;//位置
private boolean isPause=false;//是否暂停,默认不暂停

public Player(){

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


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 int play(){
Random m=new Random();
int num=m.nextInt(6)+1;
return num;
}

}

构造游戏类

package come.igeek;


import java.util.Scanner;


public class Game {
//两个玩家
Player[] player =new Player[2];
//一张地图
Map map;

//游戏初始化
public void init(){
//选角色
Scanner in = new Scanner(System.in);
for(int i=0;i<player.length;i++){
System.out.println("请玩家1选择角色:1.孙悟空;  2.猪八戒; 3.白龙马:");
int choose=in.nextInt();

player[i]=new Player();
player[i].setName(getName(choose));
}

//显示地图
map=new Map();
map.init();
//开始游戏
start();
}
//根据用户选择得到对应的角色名称
public String getName(int choose){
String name=null;
switch(choose){
case 1:
name="孙悟空";
break;
case 2:
name="猪八戒";
break;
case 3:
name="白龙马";
break;
}
return name;
}

//游戏开始
public void start(){
Scanner in = new Scanner(System.in);
//玩家循环掷筛子
while(player[0].getPoint()<99&&player[1].getPoint()<99){
//A和B轮流掷
for(int i=0;i<player.length;i++){
//player[i]是玩家A或者B
if(player[i].isPause()){
System.out.println(player[i].getName()+"暂停一轮");
player[i].setPause(false);
continue;
}
System.out.print("请玩家"+player[i].getName()+"掷骰子:");
in.nextLine();
int n=player[i].play();
System.out.println("点数为:"+n);
if(player[i].getPoint()+n>=99){
System.out.println(player[i].getName()+"获胜");
return;
}
//改变位置
player[i].setPoint(player[i].getPoint()+n);

//判断当前是否踩到关卡
int pos=player[i].getPoint();
int flag=map.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);
}

//重绘地图
map.showMap(player[0].getPoint(),player[1].getPoint());
}
}
}

public void common(int i){//前进到普通格处理,i为当前玩家
if(player[0].getPoint()==player[1].getPoint()){
if(i==0){System.out.println(player[1].getName()+"被踢回原点");player[1].setPoint(0);}
else{System.out.println(player[0].getName()+"被踢回原点");player[0].setPoint(0);}
}
}
public void luckyTurn(int i){//幸运轮盘,交换或轰炸(退六)
Scanner in = new Scanner(System.in);
System.out.println("恭喜遇到幸运轮盘,选择功能 1-与对方交换位置 2-轰炸对方");
int choose=in.nextInt();
switch(choose){
case 1:
if(i==1){
int change=player[1].getPoint();
player[1].setPoint(player[0].getPoint());
player[0].setPoint(change);
}else{
int change=player[0].getPoint();
player[0].setPoint(player[1].getPoint());
player[1].setPoint(change);
}
break;
case 2:
if(i==0){
if(player[1].getPoint()<6)player[1].setPoint(0);else player[1].setPoint(player[1].getPoint()-6);
}
else {
if(player[0].getPoint()<6)player[0].setPoint(0);else player[0].setPoint(player[0].getPoint()-6);
}
break;
default:
System.out.println("默认选择轰炸");
if(i==0){
if(player[1].getPoint()<6)player[1].setPoint(0);else player[1].setPoint(player[1].getPoint()-6);
}
else {
if(player[0].getPoint()<6)player[0].setPoint(0);else player[0].setPoint(player[0].getPoint()-6);
}
}
}
public void landMine(int i){//踩地雷(退六)
System.out.println(player[i].getName()+"踩到地雷,后退六步");
if(player[i].getPoint()<6)
{player[i].setPoint(0);}
else
{player[i].setPoint(player[i].getPoint()-6);}
}
public void pause(int i){//暂停一圈
player[i].setPause(true);
}
public void timeTunnel(int i){//时空隧道(进十)
System.out.println(player[i].getName()+"进入时空隧道,前进十步");
player[i].setPoint(player[i].getPoint()+10);
}

}


主函数测试类

package come.igeek;


public class test {


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

}

猜你喜欢

转载自blog.csdn.net/A564492203/article/details/79734891