java飛行棋實(shí)現(xiàn)思路
本文實(shí)例為大家分享了java飛行棋的注釋版,供大家參考,具體內(nèi)容如下
可以直接用:
import java.util.Scanner;
public class Fly3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int all1 = 0;// 記錄A的步數(shù)
int all2 = 0;// 記錄B的步數(shù)
int flag1 = 1;// 對(duì)于A的暫停情況進(jìn)行判斷
int flag2 = 1;// 對(duì)于B的暫停情況進(jìn)行判斷
int first1 = 0;// 進(jìn)行初始化判斷
int first2 = 0;
System.out.print("|||||||||✈|||||||||||||||||||||||" + "\n||||✈||||||飛行棋Beta版||||||||||||\n"
+ "|||||||||||||||||||||||||||✈|||||\n"+ "||||||||✈||||||||||||||||||||||||");// 標(biāo)題顯示
System.out.println();
System.out.println();
System.out.println();
System.out.println("\t}}}}圖形展示{{{{");
System.out.println("✈為傳送門(mén),一次10格" + "\n💣為炸彈,一次退回6格" + "\n⚡為被雷劈,一次直接返回原點(diǎn) " + "\n💩為幸運(yùn)輪盤(pán),踩上去可選擇相關(guān)"
+ "\n🕔為暫停,踩上后下一次行動(dòng)無(wú)法進(jìn)行" + "\n注:玩家與玩家的位置相同時(shí),后一個(gè)玩家將會(huì)將上一個(gè)玩家擠退2格");
System.out.println();
System.out.println();
String A = "玩家A";// 用戶選擇角色
A = login(A);
String B = "玩家B";
B = login(B);
if (A.equals(B)) {
B = B + "2號(hào)";
}
maps(icon(all1, all2));
for (int i = 0;; i++) {
// A玩家視角👇
System.out.println(A + "開(kāi)始投骰子");
int random1 = (int) (Math.random() * 6 + 1);
String msg = sc.nextLine();
System.out.println("少女祈禱中。。。");
System.out.println(A + "走" + random1 + "步");
all1 += random1;
if (first1 > 0) {// 判斷是否為第一次運(yùn)行地圖(由于數(shù)組坐標(biāo)重復(fù)的原因)
if (flag1 % 2 != 0) {// 判斷為第幾次踩到了暫停格子
all1 = all1 - random1;// 如果是第二次則將前面走的隨機(jī)步數(shù)減回去
System.out.println("但是" + A + "不能走!因?yàn)?);
}
}
first1++;
all2 = samepoint(all1, all2, B, A);// 判斷二者坐標(biāo)相同時(shí)(當(dāng)A擠到B的位置時(shí)B怎么辦(一種為后退四個(gè)格子一種為回到原點(diǎn)))
all1 = walk(A, all1);// 得到A所在數(shù)組下標(biāo)位置,接下來(lái)對(duì)A的位置進(jìn)行一次是否暫停的判定
flag1 = check(all1, flag1);
/*
* if (all1 == 15 || all1 == 28 || all1 == 85 || all1 == 90)
* {//(在輸出地圖之后對(duì)A當(dāng)前所在的位置進(jìn)行判定,如果滿足則讓flag自加1)
* flag1++;}此時(shí)flag在暫停判定模塊中滿足條件,進(jìn)入判定,當(dāng)?shù)诙谓Y(jié)束后flag則不會(huì)滿足上面暫停模塊的判定條件 else { flag1 =
* 0; }//正常情況時(shí)flag被賦值為0;則不會(huì)走到上面的暫停判定模塊
*
*/
if (all1 == 55 || all1 == 22 || all1 == 10) {// 對(duì)幸運(yùn)轉(zhuǎn)盤(pán)進(jìn)行操作判定
System.out.println("請(qǐng)選擇" + A + "要執(zhí)行的操作!\n1.和" + B + "換個(gè)位置\n2.讓" + B + "退后個(gè)4格子");
int choice = sc.nextInt();
if (choice == 1) {
int temp = all1;
all1 = all2;
all2 = temp;
System.out.println(A + "和" + B + "的位置交換了!");
} else {
if (all2 < 4) {
all2 = 0;
System.out.println("直接把" + B + "送回原點(diǎn)了!");
} else {
all2 -= 4;
}
}
}
maps(icon(all1, all2));// 判斷A是否符合條件獲勝
System.out.println(A+"的位置是"+all1+"\n"+B+"的位置是"+all2+"\n");
if (all1 >= 100) {
System.out.println(A + "贏啦");
return;
}
// 到此為止,對(duì)A的一輪判定結(jié)束
// B玩家地圖視角👇
System.out.println(B + "開(kāi)始投骰子");
int random2 = (int) (Math.random() * 6 + 1);
String msg2 = sc.nextLine();
System.out.println("少女祈禱中。。。");
System.out.println(B + "走" + random2 + "步");
all2 += random2;
if (first2 > 0) {// 判斷是否初始化
if (flag2 % 2 != 0) {// 判斷第幾次踩到了暫停格子
all2 = all2 - random2;
System.out.println("但是" + B + "不能走!因?yàn)?);
}
}
first2++;
all1 = samepoint(all2, all1, A, B);// 判斷二者坐標(biāo)相同時(shí)(當(dāng)B擠到A的位置時(shí)A怎么辦(一種為后退四個(gè)格子一種為回到原點(diǎn)))
all2 = walk(B, all2);
flag2 = check(all2, flag2);
if (all2 == 55 || all2 == 22 || all2 == 10) {
System.out.println("請(qǐng)選擇" + B + "要執(zhí)行的操作!\n1.和" + A + "換個(gè)位置\n2.讓" + A + "退后個(gè)4格子");
int choice = sc.nextInt();
if (choice == 1) {
int temp = all2;
all2 = all1;
all1 = temp;
System.out.println(B + "和" + A + "的位置交換了!");
} else {
if (all1 < 4) {
all1 = 0;
System.out.println("直接把" + A + "送回原點(diǎn)了!");
} else {
all1 -= 4;
}
}
}
maps(icon(all1, all2));
System.out.println(A+"的位置是"+all1+"\n"+B+"的位置是"+all2+"\n");
if (all2 >= 100) {// 判斷B是否符合條件獲勝
System.out.println(B + "贏啦");
return;
}
// 到此位置,對(duì)B的一輪判定結(jié)束
}
}
public static void maps(String[] a) {// 加空格是為了美觀
for (int i = 0; i < 32; i++) {
System.out.print(a[i] + " ");
}
System.out.println();// 第一排地圖圖形輸出
for (int i = 0; i < 32; i++) {
System.out.print(" ");
}
System.out.println(" " + a[32]);// 第二排地圖圖形輸出
for (int i = 0; i < 32; i++) {
System.out.print(" ");
}
System.out.println(" " + a[33]);// 第三排地圖圖形輸出
for (int i = 65; i > 33; i--) {
System.out.print(a[i] + " ");// 第四排地圖圖形輸出
}
System.out.println();
System.out.println(a[66]);
System.out.println(a[67]);// 第五第六排地圖輸出
for (int i = 68; i < 100; i++) {
System.out.print(a[i] + " ");// 第七排地圖圖形輸出
}
for (int i = 100; i < 105; i++) {// 結(jié)尾小旗子圖像輸出
System.out.print(a[i]);
}
System.out.println();
}
public static String[] icon(int a, int b) {
String[] map = new String[105];
for (int i = 0; i < 105; i++) {
if (i == 32 || i == 33 || i == 66 || i == 67) {
map[i] = "||";// 豎向輸出道路
} else if (i == 3 || i == 9 || i == 23 || i == 40) {
map[i] = "✈";// 傳送門(mén)logo
} else if (i == 75 || i == 62 || i == 48 || i == 37 || i == 98) {
map[i] = "💣";// 炸彈logo
} else if (i == 15 || i == 28 || i == 85 || i == 90) {
map[i] = "🕔";// 暫停logo
} else if (i == 55 || i == 22 || i == 10) {
map[i] = "💩";// 幸運(yùn)轉(zhuǎn)盤(pán)logo
} else if (i == 100 || i == 101 || i == 102 || i == 103 || i == 104) {
map[i] = "🚩";// 結(jié)尾處旗幟logo
} else if (i == 99) {
map[i] = "⚡";// 結(jié)尾處閃電logo
} else {
map[i] = "=";// 其余為橫向的道路
}
}
map[b] = "B";
map[a] = "A";
return map;
}
public static int walk(String player, int a) {// 對(duì)當(dāng)前角色應(yīng)該走到的數(shù)組下標(biāo)進(jìn)行判斷
int num = a;
switch (a) {
case 3:
case 9:
case 23:
case 40:
System.out.println(player + "進(jìn)入傳送門(mén),傳送10格!");
num = a + 10;
break;
case 75:
case 62:
case 48:
case 37:
case 98:
System.out.println(player + "危??!\n踩到炸彈了,退6格!");
num = a - 6;
return num;
case 15:
case 28:
case 85:
case 90:
num = a;
System.out.println(player + "踩到了暫停格子!");
break;
case 55:
case 22:
case 10:
num = a;
System.out.println(player + "踩到了幸運(yùn)轉(zhuǎn)盤(pán)?。。?!");
break;
case 99:
num = 0;
System.out.println(player + "危!!!\n被雷劈了,直接送回原點(diǎn)");
break;
default:
num = a;
break;
}
return num;
}
public static int check(int a, int b) {// a為位置,b為狀態(tài)判斷
if (a == 15 || a == 28 || a == 85 || a == 90) {
b++;
} else {
b = 0;
}
return b;
}
public static String login(String a) {
String[] names = { "勞拉", "不知火舞", "春麗" };
Scanner sc = new Scanner(System.in);
System.out.println("可選角色:1.勞拉\t2.不知火舞\t3.春麗");
System.out.println("請(qǐng)" + a + "選擇你的角色");// 角色選擇
int aplayer = sc.nextInt();
String player = names[aplayer - 1];
return player;
}
public static int samepoint(int a, int b, String A, String B) {// 輸入的A為受害者,B為幸運(yùn)玩家
if (a == b && a >= 2 && a != 0) {
b = b - 2;
System.out.println(A + "玩家被" + B + "玩家擠回去了2格!");
return b;
} else if (a == b && a < 2 && a > 0) {
b = 0;
System.out.println(A + "玩家被" + B + "玩家擠回去了原點(diǎn)!");
}
return b;
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
淺談mybatis-plus批量保存異常及效率優(yōu)化
本文主要介紹了mybatis-plus批量保存異常及效率優(yōu)化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01
Java實(shí)現(xiàn)ArrayList自動(dòng)擴(kuò)容
ArrayList的擴(kuò)容規(guī)則是非常簡(jiǎn)單的,它會(huì)根據(jù)需要自動(dòng)擴(kuò)容,本文就來(lái)介紹一下Java實(shí)現(xiàn)ArrayList自動(dòng)擴(kuò)容,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12
springboot獲取URL請(qǐng)求參數(shù)的多種方式
這篇文章主要介紹了springboot獲取URL請(qǐng)求參數(shù)的多種方式,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-01-01
Java正則表達(dá)式匹配字符串并提取中間值的方法實(shí)例
正則表達(dá)式常用于字符串處理、表單驗(yàn)證等場(chǎng)合,實(shí)用高效,下面這篇文章主要給大家介紹了關(guān)于Java正則表達(dá)式匹配字符串并提取中間值的相關(guān)資料,需要的朋友可以參考下2022-06-06
spring boot整合shiro安全框架過(guò)程解析
這篇文章主要介紹了spring boot整合shiro安全框架過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
Spring?Boot?如何生成微信小程序短連接及發(fā)送短信在短信中打開(kāi)小程序操作
最近遇到這樣的需求需要發(fā)送短信,通過(guò)短信中的短連接打開(kāi)小程序操作,下面小編給大家分享Spring?Boot?如何生成微信小程序短連接發(fā)送短信在短信中打開(kāi)小程序操作,感興趣的朋友跟隨小編一起看看吧2024-03-03
解決springboot啟動(dòng)失敗的問(wèn)題('hibernate.dialect'?not?set)
這篇文章主要介紹了解決springboot啟動(dòng)失敗的問(wèn)題('hibernate.dialect'?not?set),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12

