Java编写的(骑士)飞行棋
棋盘上的关卡只在骑兵第一次移动遇到时有效
功能:在控制台显示棋盘,并显示当前玩家在棋盘中所处的位置
功能:实现游戏初始化设置、展示游戏开始界面以及角色设置、控制游戏进度、实现游戏规则、以及游戏结束后结果评判
功能:启动游戏
构造地图类
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();
}
}