* 運用三大特徵 封裝 繼承 多態
* 以及包 與訪問權限的控制相關知識 完成一個控制檯類小遊戲
//人分三類 普通人 中忍 上忍
//普通人類
public class Person {
public String name; //名字
Person()
{
}
Person(String name)
{
this.name = name;
}
}
//中忍類
public class kongFuPseson extends Person{
public int blood=1000; //記錄角色血量 在角色包需要調用 所以必須用protected或public修飾
kongFuPseson()
{
}
kongFuPseson(String name)
{
this.name = name;
}
//普通招
public void commonKill(kongFuPseson p)//被打的武林中人
{
p.blood-=50; //被打的人血量減少
}
//殺招
public void bestKill(kongFuPseson p)
{
p.blood-=150;
}
}
//絕招
public interface secretKill {
public void secortKill(kongFuPseson p);//接口內全部抽象方法 抽象方法 沒有方法體 默認pubilc abstract修飾
}
//上忍
public class kongFuMaster extends kongFuPseson implements secretKill{
public void secortKill(kongFuPseson p)
{
p.blood-=300;
}
}
//創建角色 鳴人
public class mingRen extends kongFuMaster{
//在其他包中訪問 創建對象需要調用構造函數 所以需要public修飾
public mingRen(String name)
{
this.name = name;
}
//複寫父類的方法 同時用super()調用父類的方法 去血
public void secortKill(kongFuPseson p) {
super.secortKill(p);
System.out.println(this.name+"使用絕招仙法·尾獸玉幹掉了"+p.name+300+"點血量!");
}
public void commonKill(kongFuPseson p) {
super.commonKill(p);
System.out.println(this.name+"使用基本忍術多重影分身術幹掉了"+p.name+50+"點血量!");
}
public void bestKill(kongFuPseson p) {
// TODO Auto-generated method stub
super.bestKill(p);
System.out.println(this.name+"使用殺招超大玉螺旋多連丸幹掉了"+p.name+150+"點血量!");
}
}
//佐助
public class zuoZu extends kongFuMaster{
//在其他包中訪問 創建對象需要調用構造函數 所以需要public修飾
public zuoZu(String name)
{
this.name = name;
}
//複寫父類的方法 同時用super()調用父類的方法去血
public void secortKill(kongFuPseson p) {
super.secortKill(p);
System.out.println(this.name+"使用絕招血繼限界須佐能乎幹掉了"+p.name+300+"點血量!");
}
public void commonKill(kongFuPseson p) {
super.commonKill(p);
System.out.println(this.name+"使用基本忍術千鳥流乾掉了"+p.name+50+"點血量!");
}
public void bestKill(kongFuPseson p) {
// TODO Auto-generated method stub
super.bestKill(p);
System.out.println(this.name+"使用殺招天照幹掉了"+p.name+150+"點血量!");
}
}
public class showTime {
public static Scanner in = new Scanner(System.in);
public static int chioce; //接收用戶的選擇
public static kongFuMaster player; //玩家
public static kongFuMaster computer; //電腦
//判斷遊戲什麼時候結束的方法 歲的血先沒
public static boolean finish()
{
boolean f=true;
if(player.blood<=0)
f=false;
if(computer.blood<=0)
f=false;
return f;
}
//遊戲pk方法
public static void begin()
{ //隨機生成3以內的整數0,1,2 分別表示普通 殺招 絕招
int n=1;//1默認玩家先出招
do
{
int i =(int)(Math.random()*10)%3;//Math.random()隨機生成0到1間的小數
switch(i) //角色隨機出招
{
case 0:
if(n==1) //true默認玩家先出招
player.commonKill(computer);
else
computer.commonKill(player);
break;
case 1:
if(n==1)
player.bestKill(computer);
else
computer.bestKill(player);
break;
case 2:
if(n==1)
player.secortKill(computer);
else
computer.secortKill(player);
}
n*=-1;//flag=false; //角色輪流出招
}while(finish());//分號不可以漏掉
}
//遊戲結束 顯示
public static void voice()
{
if(player.blood<=0)
System.out.println("君子報仇十年不晚,後會有期");
else
System.out.println("不要羨慕哥,哥只是傳說");
}
//顯示遊戲開始窗口 選擇角色
public static void window() {
System.out.println("============歡迎進入火影忍者傳==============");
System.out.println("請選擇遊戲角色:1 鳴人 2 佐助");
chioce = in.nextInt();
if(chioce==1)
System.out.println("您選擇的是:鳴人");
else
System.out.println("您選擇的是:佐助");
}
//遊戲角色初始化
public static void roles()
{
if(chioce==1)
{
player =new mingRen("鳴人");
computer =new zuoZu("佐助");
}
else
{
player =new zuoZu("佐助");
computer =new mingRen("鳴人");
}
}
public static void main(String[] args) {
int c;
do
{
window();//顯示遊戲開始界面
roles();//遊戲角色初始化
begin();//開始遊戲
voice();//遊戲結束
System.out.println("**************************");
System.out.println("是否還想繼續?是》請選 1 否》請選 2");
c = in.nextInt();
}while(c==1);
}
}
============歡迎進入火影忍者傳==============
請選擇遊戲角色:1 鳴人 2 佐助
1
您選擇的是:鳴人
鳴人使用殺招超大玉螺旋多連丸幹掉了佐助150點血量!
佐助使用絕招血繼限界須佐能乎幹掉了鳴人300點血量!
鳴人使用基本忍術多重影分身術幹掉了佐助50點血量!
佐助使用基本忍術千鳥流乾掉了鳴人50點血量!
鳴人使用殺招超大玉螺旋多連丸幹掉了佐助150點血量!
佐助使用殺招天照幹掉了鳴人150點血量!
鳴人使用絕招仙法·尾獸玉幹掉了佐助300點血量!
佐助使用殺招天照幹掉了鳴人150點血量!
鳴人使用殺招超大玉螺旋多連丸幹掉了佐助150點血量!
佐助使用殺招天照幹掉了鳴人150點血量!
鳴人使用殺招超大玉螺旋多連丸幹掉了佐助150點血量!
佐助使用絕招血繼限界須佐能乎幹掉了鳴人300點血量!
君子報仇十年不晚,後會有期
**************************
是否還想繼續?是》請選 1 否》請選 2