題目描述:
創(chuàng)新互聯(lián)建站公司2013年成立,先為平壩等服務(wù)建站,平壩等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為平壩企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
一個(gè)農(nóng)夫帶著一匹狼、一只羊、一顆白菜要過(guò)河,只有一條船而且農(nóng)夫每次最多只能帶一個(gè)動(dòng)物或物品過(guò)河,并且當(dāng)農(nóng)夫不在的時(shí)候狼會(huì)吃羊,羊會(huì)吃白菜。,請(qǐng)?jiān)O(shè)計(jì)程序,由用戶選擇角色過(guò)河,系統(tǒng)自動(dòng)判斷游戲的勝負(fù):當(dāng)出現(xiàn)有生物被吃掉的時(shí)候,游戲失敗,所有角色都到了河的另一邊,游戲成功。
話不多說(shuō),直接看代碼:
package Test1;
import java.util.Scanner;
public class Client {
static Farmer farmer = new Farmer();
public static void menu()
{
System.out.println("==================Please choose operation============");
System.out.println("\t==========1:Cross the river alone===========");
System.out.println("\t==========2:Cross the river with ("+farmer.wolf.name+")"+"=========");
System.out.println("\t==========3:Cross the river with ("+farmer.sheep.name+")"+"============");
System.out.println("\t==========4:Cross the river with ("+farmer.cabbage.name+")"+"==========");
System.out.println("\t==========0:Quit===============");
System.out.println("===================================================");
System.out.println("Input the number(0~4):");
}
public static void show()/* 輸出農(nóng)夫、各種動(dòng)物、物品的狀態(tài)(生存、位置) */
{
System.out.println("過(guò)河狀態(tài):");
System.out.println(farmer.sheep.name+": 是否在左邊河:"+farmer.sheep.is_across_left+
" 是否在右邊河"+farmer.sheep.is_across_right+" 是否存活:"+farmer.sheep.is_alive);
//如果羊過(guò)河成功則河左邊顯示false河右邊顯示true
System.out.println(farmer.cabbage.name+": 是否在左邊河:"+farmer.cabbage.is_across_left+
" 是否在右邊河"+farmer.cabbage.is_across_right+" 是否存活:"+farmer.cabbage.is_alive);
//如果白菜過(guò)河成功則河左邊顯示false河右邊顯示true
System.out.println(farmer.wolf.name+": 是否在左邊河:"+farmer.wolf.is_across_left+
" 是否在右邊河"+farmer.wolf.is_across_right+" 是否存活:"+farmer.wolf.is_alive);
//如果狼過(guò)河成功則河左邊顯示false河右邊顯示true
System.out.println("農(nóng)夫: 是否在左邊河:"+farmer.is_across_left+" 是否在右邊河"+farmer.is_across_right);
}
public static void is_alive() { //判斷羊和白菜是否被吃
if(farmer.sheep.is_across_left==farmer.wolf.is_across_left&&farmer.sheep.is_across_right==farmer.wolf.is_across_right
&&farmer.is_across_left==farmer.sheep.is_across_right&&farmer.is_across_right==farmer.sheep.is_across_left
&&farmer.is_across_left==farmer.wolf.is_across_right&&farmer.is_across_right==farmer.wolf.is_across_left) {
//如果羊和狼在同一邊且農(nóng)夫在另外一邊時(shí)則羊會(huì)被吃
farmer.sheep.is_alive=false;
}
if(farmer.sheep.is_across_left==farmer.cabbage.is_across_left&&farmer.sheep.is_across_right==farmer.cabbage.is_across_right
&&farmer.is_across_left==farmer.cabbage.is_across_right&&farmer.is_across_right==farmer.cabbage.is_across_left
&&farmer.is_across_left==farmer.sheep.is_across_right&&farmer.is_across_right==farmer.sheep.is_across_left) {
//如果羊和白菜在同一邊且農(nóng)夫在另外一邊時(shí)則白菜會(huì)被吃
farmer.cabbage.is_alive=false;
}
}
public static int is_win(){ //判斷是否成功過(guò)河
if(farmer.sheep.is_alive==false||farmer.cabbage.is_alive==false) {
return 0; //如果羊或白菜被吃了則返回0直接退出游戲失敗
}
if(farmer.is_across_right==true&&farmer.sheep.is_across_right==true&&farmer.wolf.is_across_right&&farmer.cabbage.is_across_right==true)
{ //如果農(nóng)夫羊狼白菜都到了河的右邊則返回1游戲成功
return 1;
}
return 2; //其他情況則繼續(xù)進(jìn)行
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
int choice = 0;
int m=2; //將m的初始值設(shè)置為2表示正在進(jìn)行的情況
boolean gamevoer=false,win=false;
while(!gamevoer)
{
if(m==1||m==0) { //如果m=0或1則直接退出顯示游戲結(jié)果
break;
}
menu();
choice = input.nextInt();
System.out.println("\n");
switch(choice)
{
case 0: gamevoer=true;
break;
case 1:{
farmer.cross_alone(); /* 農(nóng)夫獨(dú)自過(guò)河的處理 */
//農(nóng)夫位置的判斷
is_alive();
show();
m=is_win(); //m用來(lái)記錄方法的返回值0,1,2
if(m==1) //如果m=1,則表示過(guò)河成功
{
win=true;//直接輸出游戲成功
}
break;
}
//以下情況類似
case 2:{
farmer.cross_wolf();/* 農(nóng)夫帶狼的處理 */
is_alive();
show();
m=is_win();
if(m==1)
{
win=true;
}
break;
}
case 3:{
farmer.cross_sheep();/* 農(nóng)夫帶羊的處理 */
is_alive();
show();
m=is_win();
if(m==1)
{
win=true;
}
break;
}
case 4:{
farmer.cross_cabbage(); /* 農(nóng)夫帶白菜的處理 */
is_alive();
show();
m=is_win();
if(m==1)
{
win=true;
}
break;
}
}
}
if(win) {
System.out.println("game over: you win !");
}else {
System.out.println("game over: you lose !");
}
input.close();
}
}
package Test1;
public class Cabbage extends wuti {
public Cabbage(){
super.name="白菜";
}
}package Test1;
public class Farmer{
boolean is_across_left = true ; //默認(rèn)河左邊為開(kāi)始的一邊
boolean is_across_right = false;
Sheep sheep = new Sheep();
Wolf wolf = new Wolf();
Cabbage cabbage = new Cabbage();
public void cross_cabbage () {
if(cabbage.is_across_left==is_across_left||cabbage.is_across_right==is_across_right) { //如果白菜農(nóng)夫在一邊
if(cabbage.is_across_left==false) { //白菜右邊到左邊
cabbage.is_across_left=true;
cabbage.is_across_right=false;
}
else { //白菜左邊到右邊
cabbage.is_across_left=false;
cabbage.is_across_right=true;
}
if(is_across_left==false) { //農(nóng)夫右邊到左邊
is_across_left=true;
is_across_right=false;
}
else { //農(nóng)夫左邊到右邊
is_across_left=false;
is_across_right=true;
}
}
else { //如果白菜農(nóng)夫不在一邊則白菜無(wú)法過(guò)河
System.out.println(cabbage.name+"不再農(nóng)夫這邊");
}
}
public void cross_sheep() {
if(sheep.is_across_left==is_across_left||sheep.is_across_right==is_across_right) { //如果羊農(nóng)夫在一邊
if(sheep.is_across_left==false) { //羊右邊到左邊
sheep.is_across_left=true;
sheep.is_across_right=false;
}
else{ //羊左邊到右邊
sheep.is_across_left=false;
sheep.is_across_right=true;
}
if(is_across_left==false) { //農(nóng)夫右邊到左邊
is_across_left=true;
is_across_right=false;
}
else{ //農(nóng)夫左邊到右邊
is_across_left=false;
is_across_right=true;
}
}
else { //如果羊農(nóng)夫不在一邊則羊無(wú)法過(guò)河
System.out.println(sheep.name+"不再農(nóng)夫這邊");
}
}
public void cross_wolf() {
if(wolf.is_across_left==is_across_left||wolf.is_across_right==is_across_right) { //如果狼農(nóng)夫在一邊
if(wolf.is_across_left==false) { //狼右邊到左邊
wolf.is_across_left=true;
wolf.is_across_right=false;
}
else { //狼左邊到右邊
wolf.is_across_left=false;
wolf.is_across_right=true;
}
if(is_across_left==false) { //農(nóng)夫右邊到左邊
is_across_left=true;
is_across_right=false;
}
else { //農(nóng)夫左邊到右邊
is_across_left=false;
is_across_right=true;
}
}
else { //如果狼農(nóng)夫不在一邊則狼無(wú)法過(guò)河
System.out.println(wolf.name+"不再農(nóng)夫這邊");
}
}
public void cross_alone() {
if(is_across_left==false) { //農(nóng)夫右邊到左邊
is_across_left=true;
is_across_right=false;
}
else{ //農(nóng)夫左邊到右邊
is_across_left=false;
is_across_right=true;
}
}
}
package Test1;
public class Sheep extends wuti{
public Sheep(){
super.name="羊";
}
}
package Test1;
public class Wolf extends wuti{
public Wolf(){
super.name="狼";
}
}
package Test1;
public class wuti {
String name;
boolean is_across_left = true ;
boolean is_across_right = false;
boolean is_alive = true;
}
首先創(chuàng)建一個(gè)物體類wuti.java,其中包括name用來(lái)說(shuō)明要過(guò)河的物體, is_across_left表示在河的左邊,默認(rèn)為true, is_across_right表示在河的右邊,默認(rèn)為false, is_alive表示物體沒(méi)有被吃,這個(gè)類是父類,將會(huì)有3個(gè)類繼承自此類,分別是Cabbage,Sheep,Wolf類,但是這3個(gè)類中只有分別表示名字的構(gòu)造方法,雖然簡(jiǎn)單但是有利于游戲的變更,比如實(shí)驗(yàn)要求的將狼,羊,白菜改為狐貍,兔子,胡蘿卜,這樣的話只需要將super.name改為需要的物體名稱就可以。
然后創(chuàng)建一個(gè)Farmer類,其中包括cross_cabbage ()方法,cross_sheep()方法,cross_wolf()方法,這3個(gè)方法分別用來(lái)表示農(nóng)夫和白菜,羊,狼過(guò)河的情況,而且農(nóng)夫必須和物體在一邊,否則會(huì)輸出提示表示物體與農(nóng)夫的位置不一樣無(wú)法進(jìn)行過(guò)河。
最后創(chuàng)建一個(gè)Client類,其中包括menu()方法,show()方法,is_alive()方法,is_win()方法,menu()方法顯示一個(gè)類似菜單的選擇項(xiàng),可以選擇想要過(guò)河的情況。show()方法輸出農(nóng)夫、各種動(dòng)物、物品的狀態(tài)(生存、位置),如果物體過(guò)河成功則河左邊(is_across_left)顯示false河右邊(is_across_right)顯示true。is_alive()方法用來(lái)判斷羊和白菜是否被吃,如果羊和狼在同一邊且農(nóng)夫在另外一邊時(shí)則羊會(huì)被吃,如果羊和白菜在同一邊且農(nóng)夫在另外一邊時(shí)則白菜會(huì)被吃。is_win()方法判斷是否成功過(guò)河,如果羊或白菜被吃了則返回0直接退出游戲失敗,如果農(nóng)夫羊狼白菜都到了河的右邊則返回1游戲成功。
在主方法中,將m的初始值設(shè)置為2表示正在進(jìn)行的情況,在while循環(huán)中如果m=0或1則直接退出顯示游戲結(jié)果,在switch語(yǔ)句中case0,1,2,3,4分別選擇過(guò)河的物體的情況,case中farmer.cross_alone()等類似的方法表示農(nóng)夫和物體過(guò)河的位置以及是否成功過(guò)河的情況,is_alive()方法表示判斷物體是否被吃,show()方法輸出農(nóng)夫、各種動(dòng)物、物品的狀態(tài)(生存、位置),is_win()方法判斷是否成功過(guò)河。巧妙利用m的值判斷是否過(guò)河成功。
結(jié)果顯示:



可以試試。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
網(wǎng)站題目:Java農(nóng)夫過(guò)河問(wèn)題的繼承與多態(tài)實(shí)現(xiàn)詳解
文章URL:http://chinadenli.net/article18/jhjigp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、標(biāo)簽優(yōu)化、云服務(wù)器、靜態(tài)網(wǎng)站、網(wǎng)站維護(hù)、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)