如何用数组绘制一个“大富翁”游戏的地图:
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::
::
::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::
::
::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
每行由三十个双冒号“::”构成,左右两列各由三个“::”组成。
将地雷:☆
暂停:■
快进:〓
后退:●
分别3,5,5,4个放置于上图中。且将玩家 “A”, “B”也至于上图,A,B及上面四个符号各占一个双冒号“::”。十万火急,似无头绪!!!
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::
::
::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::
::
::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
每行由三十个双冒号“::”构成,左右两列各由三个“::”组成。
将地雷:☆
暂停:■
快进:〓
后退:●
分别3,5,5,4个放置于上图中。且将玩家 “A”, “B”也至于上图,A,B及上面四个符号各占一个双冒号“::”。十万火急,似无头绪!!!
/**
* 骑士飞行棋-地图类
* 陈群浩
* 09/3/6
*
*/package mygame;public class Map
{
String[] mapArray=new String[107]; //地图数组
int[] xylp={8,25,42,72,86}; //幸运轮盘
int[] dilei={7,15,19,35,40,52,66,83,97}; //地雷
int[] stop={11,31,62,74}; //暂停
int[] sksd={22,27,47,65,86,93}; //时空隧道
/**
* 地图数组初始化
*/
public void initialize()
{
for(int i=0;i<mapArray.length;i++) //普通格
{
mapArray[i]="∷";
}
for(int i=0;i<xylp.length;i++) //幸运轮盘
{
mapArray[xylp[i]]="¤";
}
for(int i=0;i<dilei.length;i++) //地雷
{
mapArray[dilei[i]]="★";
}
for(int i=0;i<stop.length;i++) //暂停
{
mapArray[stop[i]]="■";
}
for(int i=0;i<sksd.length;i++) //时空隧道
{
mapArray[sksd[i]]="〓";
}
}
/**
* 打印地图数组
*/
public void printMapArray()
{
for(int i=0;i<=32;i++)
{
System.out.print(mapArray[i]);
}
System.out.println("\n\t\t\t\t\t\t\t\t"+mapArray[33]);
System.out.println("\t\t\t\t\t\t\t\t"+mapArray[34]);
System.out.println("\t\t\t\t\t\t\t\t"+mapArray[35]);
System.out.println("\t\t\t\t\t\t\t\t"+mapArray[36]);
for(int i=69;i>=37;i--)
{
System.out.print(mapArray[i]);
}
System.out.println();
System.out.println(mapArray[70]);
System.out.println(mapArray[71]);
System.out.println(mapArray[72]);
System.out.println(mapArray[73]);
for(int i=74;i<mapArray.length;i++)
{
System.out.print(mapArray[i]);
}
}
}
/**
* 骑士飞行棋-玩家类
* 陈群浩
* 09/3/6
*
*/package mygame;import java.util.Scanner;public class Player
{
String name; //昵称
int place; //位置
public static String temp; //临时用
/**
* 玩家选择角色
*
*/
public void selectRole(String s)
{
System.out.print(s);
Scanner input=new Scanner(System.in);
String num;
//判断输入是否有问题
while(true)
{
while(true)
{
num=input.next();
if(num.equals("1") || num.equals("2") || num.equals("3") || num.equals("4") )
{
break;
}
else
{
System.out.print("输入错误!,请选择角色编号1-4:");
}
}
//判断选择什么角色
if(num.equals("1"))
name="JAVA";
else if(num.equals("2"))
name="HTML";
else if(num.equals("3"))
name="SQL";
else
name="C#";
if(name.equals(temp))
{
System.out.print(name + " 已被玩家一选择,请重新选择:");
}
else
{
return ;
}
}
}
/**
* 打印信息1
*
*/
public static void printXinxi1()
{
System.out.println("\n◇◇◇◇◇◇◇◇◇◇◇◇ 两 人 对 战 ◇◇◇◇◇◇◇◇◇◇◇◇\n");
System.out.println("请选择角色: 1. JAVA 2. HTML 3. SQL 4. C#");
}
}/**
* 骑士飞行棋-游戏类
* 陈群浩
* 09/3/6
*
*/package mygame;import java.util.Scanner;public class Game
{
Player player1; //玩家一
Player player2; //玩家二
Map map; //游戏地图
public static int =0; //标识哪个玩家暂停一次.1=玩家一 2=玩家二
/**
* 程序入口
* @param args
*/
public static void main(String[] args)
{
Game g=new Game();
g.initialize(); //游戏类初始化
g.startGame(); //开始游戏
}
/**
* 打印游戏横幅
*
*/
static
{
System.out.println("T22班 陈群浩制作 09/3/6");
System.out.println("说明:该程序在MyEclipse 5.5.1 GA编译运行的话,地图右侧没有对齐。\n" +
"但是生成JAR包在命令提示符里运行的话是有对齐的。");
System.out.println("\n※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
System.out.println("\\\\\t\t\t\t\t\t\t\t//");
System.out.println("\\\\\t\t\t\t\t\t\t\t//");
System.out.println("\\\\\t\t 骑 士 飞 行 棋 \t\t\t//");
System.out.println("\\\\\t\t\t\t\t\t\t\t//");
System.out.println("\\\\\t\t\t\t\t\t\t\t//");
System.out.println("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
}
/**
* 游戏类初始化
*
*/
public void initialize()
{
map=new Map(); //创建地图对象
map.initialize(); //地图数组初始化
Player.printXinxi1(); //打印信息
player1=new Player(); //创建玩家一对象
player1.selectRole("请玩家一选择角色:"); //玩家一选择角色
Player.temp=player1.name;
player2=new Player(); //创建玩家二对象
player2.selectRole("请玩家二选择角色:"); //玩家二选择角色
printXinxi2(); //打印信息
map.mapArray[0]="@@";
map.printMapArray(); //打印地图数组
}
/**
* 打印信息2
*/
public void printXinxi2()
{
System.out.println("\n\n******************************************************************");
System.out.println("\t\t\t Game Start");
System.out.println("******************************************************************");
System.out.println("\n"+player1.name+"的士兵:A");
System.out.println(player2.name+"的士兵:B");
System.out.println("\n图例: \n■ 暂停 ¤ 幸运轮盘 ★ 地雷 〓 时空隧道 ∷ 普通 $ 终点\n");
}
/**
* 开始游戏
*
*/
public void startGame()
{
boolean =true;
Scanner input=new Scanner(System.in);
while(true)
{
if() // 轮到玩家一
{
System.out.print("\n\n"+player1.name +"(A),请您按任意字母键后回车启动掷骰子:");
input.next();
player1.place=getCount(player1.place); //获得骰子随机数
getResult(1,player1.place); //获得最新位置
if(Game.==2)
{
Game.=0;
}
else
{
=false;
}
}
else //轮到玩家二
{
System.out.print("\n\n"+player2.name +"(B),请您按任意字母键后回车启动掷骰子:");
input.next();
player2.place=getCount(player2.place); //获得骰子随机数
getResult(2,player2.place); //获得最新位置
if(Game.==1)
{
Game.=0;
}
else
{
=true;
}
}
}
}
/**
* 返回骰子随机数
* @return
*/
public int getCount(int place)
{
int random=((int)(Math.random()*6)+1); //获得骰子随机数
System.out.println("\n---------------------------------------");
System.out.println("骰子数:"+random);
place+=random;
if(place>106) //超过终点
{
place=106-(place-106);
System.out.println("\n不小心超过终点了,被退回超过格数");
return place;
}
return place;
}
/**
* 返回掷骰子后当前位置
* 参数一:玩家 参数二:位置
* @param i
* @param place
* @return
*/
public void getResult(int i,int place)
{
boolean hao=false; //为true时获胜
Scanner input=new Scanner(System.in);
//所在位置是幸运轮盘
if(map.mapArray[place].equals("¤"))
{
//所在位置是幸运轮盘
System.out.println("\n◆◇◆◇◆欢迎进入幸运轮盘◆◇◆◇◆");
System.out.println("请选择一种运气:");
System.out.println("1. 交换位置 2. 轰炸(退4格)");
System.out.println("=============================");
String num;
while(true)
{
num=input.next();
if(num.equals("1") || num.equals("2"))
{
break;
}
else
{
System.out.print("输入错误!请输入 1 或者 2 :");
}
}
if(num.equals("1")) //选择交换位置
{
player1.place+=player2.place;
player2.place=player1.place-player2.place;
player1.place=player1.place-player2.place;
}
else //选择轰炸
{
if(i==1)
{
if(player2.place-4<0)
{
player2.place=0;
}
else
{
player2.place-=4;
if(map.mapArray[player2.place].equals("A"))
{
player1.place=0;
System.out.println("倒霉,被踩回起点。");
}
}
}
else
{
if(player1.place-4<0)
{
player1.place=0;
}
else
{
player1.place-=4;
if(map.mapArray[player1.place].equals("B"))
{
player2.place=0;
System.out.println("倒霉,被踩回起点。");
}
}
}
}
}
//所在位置是地雷
else if(map.mapArray[place].equals("★"))
{
System.out.println("\n倒霉,踩到地雷被退回6格!");
if(i==1)
{
if(player1.place-6<0)
{
player1.place=0;
}
else
{
player1.place-=6;
if(map.mapArray[player1.place].equals("B"))
{
player2.place=0;
System.out.println("哈哈,把对方踩回起点。");
}
}
}
else
{
if(player2.place-6<0)
{
player2.place=0;
}
else
{
player2.place-=6;
if(map.mapArray[player2.place].equals("A"))
{
player2.place=0;
System.out.println("哈哈,把对方踩回起点。");
}
}
}
}
//所在位置是暂停
else if(map.mapArray[place].equals("■"))
{
System.out.println("\n倒霉,被暂停一次掷骰子机会!");
if(i==1)
{
Game.=1;
}
else
{
Game.=2;
}
}
//所在位置是时空隧道
else if(map.mapArray[place].equals("〓"))
{
System.out.println("\n恭喜,进入时空隧道,前进10格。");
if(i==1)
{
player1.place+=10;
if(map.mapArray[player1.place].equals("B"))
{
player2.place=0;
System.out.println("哈哈,把对方踩回起点。");
}
}
else
{
player2.place+=10;
if(map.mapArray[player2.place].equals("A"))
{
player1.place=0;
System.out.println("哈哈,把对方踩回起点.");
}
}
}
//玩家重叠 A踩B
else if(map.mapArray[place].equals("B"))
{
if(i==1)
{
System.out.println("\n很好,把对方踩回起点。");
player2.place=0;
}
}
//玩家重叠 B踩A
else if(map.mapArray[place].equals("A"))
{
if(i==2)
{
System.out.println("\n很好,把对方踩回起点。");
player1.place=0;
}
}
//到达终点
else if(map.mapArray[place].equals("$"))
{
hao=true;
}
if(i==1)
{
System.out.println("\n您当前位置:"+player1.place);
System.out.println("对方当前位置:"+player2.place);
}
else
{
System.out.println("\n您当前位置:"+player2.place);
System.out.println("对方当前位置:"+player1.place);
}
System.out.println("---------------------------------------");
//地图数组赋值
map.initialize();
map.mapArray[player1.place]="A";
map.mapArray[player2.place]="B";
//打印地图数组
map.printMapArray();
if(hao)
{
if(i==1)
{
System.out.println("\n恭喜,顺利到达终点,本局由"+player1.name+"获胜。");
}
else
{
System.out.println("\n恭喜,顺利到达终点,本局由"+player2.name+"获胜。");
}
hao=false;
System.out.print("\n本轮游戏结束!输入'y'重新开始,输入其它退出游戏:");
String answer=input.next();
if(answer.endsWith("y"))//重新开始
{
Game g=new Game();
g.initialize(); //游戏类初始化
g.startGame(); //开始游戏
}
else//结束程序
{
System.out.println("游戏已结束!");
System.exit(1);
}
}
}
}