1.规则
龟兔赛跑:
--普通格,共100格
龟:每次随机移动1至3格
兔子:每次随机移动1至6格
每20格会随机出现以下功能格各一次(不会在同一格内出现两种或两种以上功能)
功能格:(**和^^可以连续执行,@@和==不能连续执行)
**幸运星格:选手可再行动一次
@@地雷格:兔子回到上数两个地雷格,龟回到上一地雷格(若后方无地雷格则回到起点)
==传送格:兔子到达下一传送格,龟到达下数两个传送格(若前方无传送格则到达终点)
||树格:兔子停止三次行动
^^下坡格:龟前进10格
2.应用技术
Java中实现龟兔赛跑的技术大多是集合与接口,对于并不熟悉这部分知识的朋友们,我们今天将采用数组的知识来实现这个小游戏
3.首先我们要先定义一个Map类
我们将在这个类里完成地图的搭建
public class Map {
public static String map[] = new String[100];
//判断数字再数组中是否存在 存在返回true 不存在返回false
public static boolean check(int[] arr, int rand) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == rand) {
return true;
}
}
return false;
}
//使用静态块再程序加载时就初始化地图数据
static {
Arrays.fill(map, "--");
String function[] = {"**", "@@", "==", "||", "^^"};
int a;
//把地图分成五组
for (int i = 0; i < 5; i++) {
int [] arr = new int[5];
//为每组生成五个功能格
for (int j = 0; j <5; j++) {
int rand = (int) (Math.random() * 20 +20*i);
while (check(arr,rand)){
rand = (int) (Math.random() * 20 +20*i);
}
arr[j] = rand;
map[rand] = function[j];
}
}
System.out.println("地图初始化完成");
}
}
4.接下来定义一个Animal类
在这个类里编写乌龟和兔子共同的属性与规则,这里我们要把它设置成抽象类,里面的方法要在乌龟类和兔子类中完善出来
public abstract class Animal {
protected String name;
protected int position;
protected int maxStep;
public void play(){
printMap();
run();
check();
lucky();
check();
boom();
down();
check();
tree();
tp();
check();
}
public void check(){
if(position>=99){
System.out.println("游戏结束,"+name+"赢了");
//主动退出程序
System.exit(0);
}
}
public void run(){
int rand = (int) (Math.random() * maxStep) + 1;
position = position+rand;
System.out.println(name+"本次走了"+rand+"步,当前位置在"+position);
}
public void lucky(){
if (Map.map[position].equals("**")){
System.out.println(name+"遇到了幸运格 再走一次");
run();
}
}
public abstract void boom();
public abstract void tp();
public void tree(){
if (Map.map[position].equals("||")){
}
}
public void down(){
if (Map.map[position].equals("^^")){
}
}
public void printMap(){
for (int i =0;i<Map.map.length;i++){
if (i==position){
System.out.print(name);
}
else {
System.out.print(Map.map[i]);
}
}
System.out.println();
}
}
5.再定义一个Rabbit类
先继承Animal类,然后编写兔子特有的属性与方法
public class Rabbit extends Animal{
//兔子遇到树停止的次数
private int stopCount;
private boolean sleep=false;
public Rabbit(){
name = "兔子";
maxStep = 6;
}
@Override
public void boom() {
if (Map.map[position].equals("@@")) {
if (position < 40){
position = 0;
System.out.println(name +"遇到了地雷 被炸回原点");
return;
}
int count = 0;
for (int i = position-1;i>0;i--){
if (Map.map[i].equals("@@")){
count++;
}
if (count ==2){
position = i;
break;
}
}
System.out.println(name+"遇到了地雷 被炸到了"+position+"位置");
}
}
@Override
public void tp() {
if (Map.map[position].equals("==")){
if (position>=80){
position = 99;
System.out.println(name+"遇到了传送格 直接传送到了终点");
return;
}
for (int i = position+1;i<100;i++){
if (Map.map[i].equals("==")){
position = i;
break;
}
} System.out.println(name+"遇到了传送格 传送到了"+position+"位置");
}
}
public void tree(){
if(Map.map[position].equals("||")){
if(!sleep){
stopCount=3;
System.out.println("兔子遇到了树,停止三次移动");
sleep=true;
}
}
}
public void run(){
if(stopCount>0){
stopCount--;
System.out.println(name+"正在睡觉,这是第"+(3-stopCount)+"轮");
}else{
sleep=false;
super.run();
}
}
}
6.再定义一个Turtle类
这是编写乌龟的一个类
public class Turtle extends Animal {
public Turtle() {
name = "乌龟";
maxStep = 3;
}
@Override
public void boom() {
if (Map.map[position].equals("@@")) {
if (position < 20) {
position = 0;
System.out.println(name + "遇到了地雷 被炸回原点");
return;
}
for (int i = position - 1; i > 0; i--) {
if (Map.map[i].equals("@@")) {
position = i;
break;
}
}
System.out.println(name + "遇到了地雷 被炸到了" + position + "位置");
}
}
@Override
public void tp() {
if (Map.map[position].equals("==")) {
if (position >= 60) {
position = 99;
System.out.println(name + "遇到了传送格 直接传送到了终点");
return;
}
int co = 0;
for (int i = position + 1; i < 100; i++) {
if (Map.map[i].equals("==")) {
co++;
}
if (co == 2) {
position = i;
break;
}
}
System.out.println(name + "遇到了传送格 传送到了" + position + "位置");
}
}
@Override
public void down() {
if (Map.map[position].equals("^^")) {
position = position + 10;
System.out.println(name + "遇到了下坡路,前进十格");
}
}
}
7.最后定义一个Game类
这里就是我们最后进行龟兔赛跑游戏的一个运行与测试的类
public class Game {
public static void main(String[] args) {
Animal r=new Rabbit();
Animal t=new Turtle();
Scanner sc=new Scanner(System.in);
while(true){
r.play();
t.play();
sc.nextLine();
}
}
}
8.运行结果
一直按回车直到游戏结束