博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java团队项目总结
阅读量:4685 次
发布时间:2019-06-09

本文共 22117 字,大约阅读时间需要 73 分钟。

Java团队项目总结

1.项目实现情况

  • 项目概述:

    我们团队项目准备实现一个有关于大富翁有的游戏程序。

    大富翁游戏,以经营权为主要的游戏方式,通过购买经营权与架构经营的星级服务来获得最大的利益,当其他玩家破产后,最后一个玩家取得胜利来结束游戏。在百度词条上示意为,默认多幅地图,以掷骰点数前进,并有多种道具、卡片使用,另外触发一些“特别事件”。主要通过购买房产,收取对方的路费、租金来导致对手的破产。

  • 项目预期:

    鉴于对java学习的程度和掌握内容,基本实现大富翁的游戏内容我们的项目打算实现以下目标。

    • 按照计划,首先需要列出我们要实现的特殊卡牌功能card,其中有BarricadeCardBlackCardDemolitionCardEqualizedWealthCardFortuneGodCardLandCardLotteryCard 、MonsterCardPlunderCardPurchaseCardRedCard RemoteDiceCardRetentionCardTaxInspectionCardTortoiseCardTurnCardWealthGodCard同时需要一个CardSystem用来管理所有设计的Card类。

    • 其次设计大富翁游戏里的杂项功能,比如角色的数量,时间等,就需要一下class文件DateEntranceMenuPrintPlayerStock等,比如Date就用来实现大富翁游戏中日期的计数,Entrance实现整个大富翁游戏的入口MenuPrint就用来实现游戏中每一步之后显示的菜单选项,Player就用来实现游戏的参与游戏的数量,Stock用来返回各项菜单。

    • 最后需要设计大富翁游戏的重要的场景,例如医院、彩票站等。BankBlankCardGetCardShopHospitaHousLandLandindexLottteryStationNewsParkPiontPoliceStation

  • 项目结果(总项目列表):

    • Card类:

    • PJ类:

    • Place类:

2.项目测试

  • 项目分析:

    因为所要完成总任务的大项都是由小项合并起来完成的。以下举出几个例子。

  • LotteryStation(彩票站):

    • 程序代码:

      package place;import java.util.Scanner;import PJ.Entrance;import PJ.Player;public class LotteryStation extends  Land {LotteryStation(int x, int y,String name) {    this.i = x;    this.j = y;         this.name=name;}            @Override        public char getchart() {            return '彩';            // TODO Auto-generated method stub        }        public  void printInformation(int step) {    System.out.println("这里是彩票站~~");// TODO Auto-generated method stub}@Overridepublic void printaction(int step,int namei){    Player player=new Player();for(int i=0;i
      =1000){int i=(int)(Math.random()*5+1);if(i==3){ System.out.println("恭喜您中奖了!获得奖励5000元"); player.setCash(player.getCash()+4000);}else{ System.out.println("很遗憾,您差点中奖,继续购买请输入y,离开请输入n"); player.setCash(player.getCash()-1000); answer=input.next();}}else{System.out.println("您的现金不足,彩票不支持刷卡");break;}}else if(answer.equals("n")){ System.out.println("真是遗憾,下次再来碰碰运气吧");break;}else{System.out.println("不好意思,是不是输入错误了啊!");answer=input.next();}}}public char getinitialchart() {return '彩';// TODO Auto-generated method stub}
      LotteryStation

       

       
    • 代码分析:

      首先关于彩票站是属于Place里的一项,为了实现游戏中玩家使相互对方破产的功能。

      其次代码在编写的时不仅需要import java.util.Scanner;用来输入数据,还需要和杂项文件PJ中的EntrancePlayer的数据联系起来。使用import PJ.Entrance;import PJ.Player;

      再次在这个彩票站的主函数中需要继承Land函数,Land函数是整个游戏地图的总揽,当前进到彩票站的环节,就需要继承Land

      注意,因为继承了父类,所以在子类编写的时候加上@Overrid编译器会验证下面的方法是否是父类中所有的,如果没有则报错。这样会方便代码的书写和编译。

      彩票站的主要功能是购买彩票,验证是否中奖,或者选择离开等功能。我们在这里的金额计算采用差额计算法,即第一次购买彩票和之后的结果进行计算,比如购买彩票需要1000,中奖5000,在中奖下面用代码player.getCash()+4000来表示,将奖金中的一部分金额用来计算为购买彩票的金额。

      在编译的时候就要注意到在彩票站会有很多中情况,例如购买彩票的中奖与不中奖、选择继续还是不继续购买彩票、在购买的时候金额会不会足够、在输入时候格式会不会有问题,需要注意很多的细节问题。

    • 代码测试结果:

    • 显示出输入错误信息,未中奖信息,中奖信息等。

  • Player:

    • 程序代码:

      1 package PJ;  2   3 import java.util.ArrayList;  4 import java.util.Scanner;  5   6 import place.Landindex;  7 import card.CardSystem;  8   9 public class Player { 10 private double deposit ; 11 private double cash; 12 private int Point; 13 private int housequantity; 14 private int step; 15 private double houseValue; 16 private int direction =1; 17 private int location=(int)(Math.random()*67+1); 18 private String name ; 19 private int namei; 20 private String direct ; 21 private int special=0;//=0时正常,=1-6时使用了遥控骰子,=7时处于滞留卡状态,=8时处于乌龟卡状态,=9-16时处于福神保佑状态,=17-24时处于财神保佑状态 22 private int[] cards=new int[17]; 23 private int[] stocks=new int[10]; 24 Player(double deposit,double cash,int point,int housequantity,int housevalue,int direction,String name,int namei,int special){ 25 this.deposit=deposit; 26 this.cash=cash; 27 this.Point=point; 28 this.housequantity=housequantity; 29 this.houseValue=housevalue; 30 this.direction=direction; 31 this.name=name; 32 this.special=special; 33 this.namei=namei; 34 for(int i=0;i<=16;i++){ 35 cards[i]=1; 36     } 37     } 38 public Player() { 39 // TODO Auto-generated constructor stub 40 } 41 public void move(){ 42     if (deposit + cash > 0){ 43     if(direction==1){ 44     direct="顺时针"; 45     }else{ 46         direct="逆时针"; 47     } 48     System.out.println("现在是玩家"+name+"的回合,您的前进方向是"+direct+"。"); 49     if(Date.day==1){ 50     System.out.println("又到了月初,您的存款已在月末获得了10%的利息"); 51         this.deposit=deposit*1.1; 52     } 53     System.out.println("您现在可以进行如下操作:"); 54 MenuPrint.print1(); 55 Scanner input = new Scanner(System.in); 56     int digitalInput = input.nextInt(); 57     while (true) { 58     if (digitalInput >= 0 && digitalInput <= 8) 59     break; 60 else { 61     System.out.print("invalid input, please enter again :"); 62     digitalInput = input.nextInt(); 63     } 64     } 65     while (digitalInput != 6 && digitalInput != 7) { 66     switch (digitalInput) { 67 case 0: 68     MenuPrint.printmap(); 69     System.out.println("还有什么要看的"); 70     MenuPrint.print1(); 71     digitalInput = input.nextInt();  72     break; 73 case 1: 74     MenuPrint.printinitialmap(); 75     System.out.println("还有什么要看的"); 76     MenuPrint.print1(); 77     digitalInput = input.nextInt();                      78     break; 79 case 2: 80     System.out.println("名称"+"\t\t\t\t"+"功能"+"\t\t"+"类型"+"\t\t"+"价格"+"\t\t"+"适用范围"+"\t\t"+"剩余数量"); 81     for(int i=0;i<=16;i++){ 82         System.out.println(i+":"+CardSystem.cardsystem[i].getName()+"\t\t"+CardSystem.cardsystem[i].getFunction()+"\t\t"+CardSystem.cardsystem[i].getType()+"\t\t"+CardSystem.cardsystem[i].getPoint()+"\t\t"+CardSystem.cardsystem[i].getRange()+"\t\t"+cards[i]); 83     } 84     System.out.println("请选择"); 85     Scanner in=new Scanner(System.in); 86     int inner=in.nextInt(); 87     if(cards[inner]==0){ 88         System.out.println("此卡数量不足"); 89     }else{ 90         CardSystem.cardsystem[inner].print(location, namei);                         91         cards[inner]--; 92     } 93     System.out.println("还有什么要看的"); 94     MenuPrint.print1(); 95     digitalInput = input.nextInt();                  96     break; 97 case 3: 98     boolean luzhang=false; 99     for (int i = 1; i <= 10; i++) {100         if (Landindex.mark[location+i].state == false) {101             System.out.println("前方第" + i + "步处有路障,小心哦,还有什么要看的");102             luzhang=true;103         }104     }105     if(!luzhang){106         System.out.println("没有情况;还有什么要看的");107     }108     MenuPrint.print1();109     digitalInput = input.nextInt();                 110     break;111 case 4:112     System.out.print("请输入您想查询的地方与您相差的步数
      <后方用负数,按q退出>
      :");113 String Input = input.next();114 if (Input.equals("q")) {115 System.out.println("还有其它想看的么,请输入 :");116 MenuPrint.print1();117 digitalInput = input.nextInt();118 break;119 } else {120 int i = Integer.parseInt(Input);121 Landindex.mark[(location+i)%68].printInformation((location+i)%68);122 System.out.println("还有其它想的么,请输入 :");123 MenuPrint.print1();124 digitalInput = input.nextInt();125 break;126 }127 case 5:128 System.out.println("玩家"+"\t"+"现金 "+"\t"+"存款 "+"\t"+"房产数"+"\t"+"房产价值"+"\t"+"点券数");129 for(int i=0;i
      =allprice){160 if(deposit>=allprice){161 deposit-=allprice;162 }else{163 cash-=(allprice-deposit);164 deposit=0;165 }166 stocks[num-1]+=amount;167 Stock.stocksystem[num-1].setHold(Stock.stocksystem[num-1].getHold()+amount);168 System.out.println("购买成功!");169 break;170 }else{171 System.out.println("购买失败,您的金钱不足");172 break;173 } 174 }else if(choose.equals("s")){175 //System.out.println("您当前持有量为"+stocks[num-1]+"您要卖出"+amount);176 if(stocks[num-1]>=amount){177 double allprice=Stock.stocksystem[num-1].getPrice()*amount;178 stocks[num-1]-=amount;179 deposit+=allprice;180 Stock.stocksystem[num-1].setHold(Stock.stocksystem[num-1].getHold()-amount);181 System.out.println("抛售成功!");182 break;183 }else{184 System.out.println("抛售失败,您的持有量不足");185 break;186 }187 }else{188 System.out.print("invalid input, please enter again :");189 stockin=input.next();190 }191 } 192 System.out.println("还有其它想的么,请输入 :");193 MenuPrint.print1();194 digitalInput = input.nextInt();195 break;196 }197 }198 }199 if (digitalInput == 6) {200 int actualStep = (int)(Math.random()*6+1);201 //System.out.println("前面"+actualStep);202 //当使用滞留卡时203 if(special==7){204 actualStep=0;205 special=0;206 //使用遥控骰子时207 }else if(special>0&&special<=6){208 actualStep=special;209 special=0;210 } 211 //遇到路障时212 for(int i= 1; i < actualStep; i++){213 if (Landindex.mark[(location+i* direction)%68].state == false) {214 System.out.println("前面第" + i + "步遇到了路障,过不去了");215 actualStep = i;216 Landindex.mark[(location+i* direction)%68].state=true;217 location=(location+i* direction)%68;218 break;219 } 220 }221 //当经过银行时222 for (int j = 1; j < actualStep; j++) {223 if (Landindex.mark[(location+j* direction)%68] instanceof place.Bank) {224 Landindex.mark[(location+j* direction)%68].printaction((location+j* direction)%68, namei);225 break;226 }227 } 228 location=(location+actualStep*direction)%68;229 // System.out.println("后面"+actualStep);230 Landindex.mark[location].printaction(location, namei);231 } 232 if (digitalInput == 7) {233 System.out.println("祝您下次游戏愉快~~");234 for(int i=0;i
      Player

       

    • 代码分析:

      之前提到的Player函数,并没有用来作为玩家的初始数据设置。根据游戏性质,玩家在每到一个地方的时候就会发生金钱或者其他数据的变化,不论发生在哪一个场景,发生变化的数据总是这么几个数据,所以就将其列入Player函数中。在每遇到不同的信息的时候就直接调用,比如在Player函数中定义的金钱变化的函数private double cash;this.cash=cash;等,当遇到金钱的变化时候直接调用函数就可以记录。

  • Hospital:

    • 程序代码:

      1 package place; 2 public class Hospital extends Land{ 3 Hospital(int x, int y,String name) { 4 this.i = x; 5 this.j = y;      6 this.name=name; 7 } 8  9 @Override10 public char getchart() {11 // TODO Auto-generated method stub12 return '医';13     }14     public char getinitialchart() {15         return '医';16         // TODO Auto-generated method stub17     }18     public void printInformation(int step){19     System.out.println("这里是医院~~");20     }21     @Override22     public void printaction(int step,int namei){    23         System.out.println("这里是医院~~");24 }25 }
      Hospital

       

    • 代码分析:

      因为在大富翁游戏中存在一些没有没有任何功能的地方,只是简单的等待或者显示什么都不会发生等。比如HospitalPoliceStationLand等,这一类的只需要在继承父类时候加上@Overrid检查与父类中相同段代码是否相同,方便日后的代码的维护与编译。

  • Entrance:

    • 程序代码:

      1 package PJ; 2  3 import java.util.ArrayList; 4 import java.util.Scanner; 5  6 public class Entrance { 7 public static int playernumber=0; 8 public static ArrayList
      players=new ArrayList
      (); 9 public static void main(String[] args) throws InterruptedException {10 System.out.println("==================== 游戏开 始 ======================");11 while(true){12 System.out.println("请输入参加的玩家数:");13 Scanner input = new Scanner(System.in);14 playernumber = input.nextInt();15 if(playernumber<2){16 System.out.println("参与玩家数在2-4人之间,请重新输入");17 }18 if(playernumber>4){19 System.out.println("参与玩家数在2-4人之间,请重新输入");20 }21 if(playernumber>=2&&playernumber<=4){22 System.out.println("设置成功,本次游戏共有"+playernumber+"名玩家,祝您游戏愉快");23 break;24 }25 }26 if(playernumber==2){27 Player player1=new Player(15000, 15000, 100, 0, 0, 1, "玩家1", 1, 0);28 Player player2=new Player(15000, 15000, 100, 0, 0, 1, "玩家2", 2, 0);29 players.add(player1);30 players.add(player2);31 }32 if(playernumber==3){33 Player player1=new Player(15000, 15000, 100, 0, 0, 1, "玩家1", 1, 0);34 Player player2=new Player(15000, 15000, 100, 0, 0, 1, "玩家2", 2, 0);35 Player player3=new Player(15000, 15000, 100, 0, 0, 1, "玩家3", 3, 0);36 players.add(player1);37 players.add(player2);38 players.add(player3);39 }40 if(playernumber==4){41 Player player1=new Player(15000, 15000, 100, 0, 0, 1, "玩家1", 1, 0);42 Player player2=new Player(15000, 15000, 100, 0, 0, 1, "玩家2", 2, 0);43 Player player3=new Player(15000, 15000, 100, 0, 0, 1, "玩家3", 3, 0);44 Player player4=new Player(15000, 15000, 100, 0, 0, 1, "玩家4", 4, 0);45 players.add(player1);46 players.add(player2);47 players.add(player3);48 players.add(player4);49 }50 while(true){51 Date.print();52 if(Date.totalday%7!=6&&Date.totalday%7!=0){53 for(int i=0;i<=9;i++){54 Stock.stocksystem[i].run();55 }56 System.out.println("今天是工作日,股市正常开市");57 }else{58 System.out.println("今天是双休日,股市休市");59 }60 for(int i=0;i
      Entrance

       

      程序分析:

    是整个程序的主函数,整个PJ包包含着项目的主要函数,entrance是整个项目的入口,主要定义了玩家的数量,以及每位玩家的初始位置以及初始金币等个人信息。通过scanner函数让用户选择玩家的人数System.out.println("请输入参加的玩家数:"); Scanner input = new Scanner(System.in); playernumber = input.nextInt();,并引用之后所需要的数组比如Player player1=new Player(15000, 15000, 100, 0, 0, 1, "玩家1", 1, 0);

  •  

  • Date:

    • 程序代码:

      1 package PJ; 2  3 public class Date { 4 public static int year=2016,month=5,day=30,totalday=1; 5 public static void print(){ 6 System.out.println("今天是"+year+"年"+month+"月"+day+"日"+"周"+(totalday%7)); 7 totalday++; 8 day++; 9 if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){10 if(day==32){11     day=1;12     month++;13 }14 if(month==13){15     month=1;16     year++;17 }18 }19     if(month==2){20     if(day==29){21     day=1;22     month++;23 }24     }25     if(month==4||month==6||month==9||month==11){26     if(day==32){27     day=1;28     month++;29     }30 }31 }32 }
      Date

       

  • 程序分析:

    主要是定义了日期,用最简单的if语句if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){

    ,来定义,用户选择后来每月的30 31 28 29天数。当然如果满天数溢出之后month进一if(day==32){ day=1; month++; },依次循环。

  • MenuPrint:

    • 程序代码:

      1 package PJ; 2  3 import card.CardSystem; 4 import place.Landindex; 5  6 public class MenuPrint { 7     public static void print1() { 8     System.out.println("0 - 查看地图\n1 - 查看原始地图\n2 - 使用道具\n3 - 前方十步内示警\n4 - 查看前后指定步数的具体信息\n5 - 查看玩家的资产信息\n6 - 想看的都看了,心满意足扔骰子" 9             + "\n7 - 不玩了,认输\n8 - 股票");10     System.out.print("请选择 :");11     }12     public static void printstock(int namei) {13     Player player=new Player();14     int[] stocks ;15     for(int i=0;i
      MenuPrint

       

    • 程序分析:

    这是程序的菜单类,比如每个回合用户走到了哪里,地图上能够print出来public static void printmap(){ char[][] blank=new char[10][20]; for(int i=0;i<=9;i++){ for(int j=0;j<=19;j++){ blank[i][j]=(char)12288; } }。设计思想就是类C用一个case语句,来让用户选择每一步的行为。landindex项来确定用户每一步走到了哪里if(Landindex.mark[i].i==y&&Landindex.mark[i].j==x) blank[x][y]=Landindex.mark[i].getchart();。用if语句来保证,因为最开始并不能确定到底有多少名用户。用四个if套环就能确定

  • Stock:

    • 程序代码:

      1 package PJ; 2  3 public class Stock { 4 String name; 5 int number;//序号 6 double price; 7 int hold=0;//持有量 8 double increase; 9 public boolean state=false;10 Stock(String name,int number,double price){11     this.name=name;12 this.number=number;13     this.price=price;14 }15 public  String getName(){16     return name;    17 };18 public  int getNumber() {19     return number;20 }21 public  int getHold() {22     return hold;23 }24 public  void setHold(int i) {25     this.hold=i;26     }27     public  double getPrice() {28     return price;29 }30 public  double getIncrease() {31     return increase;32     }33 public void run() {34     increase=(Math.random()-0.5)*0.2;35     increase=Double.parseDouble(String.format("%.2f",increase));36     this.price=price*(1+increase);37     this.price=Double.parseDouble(String.format("%.2f",price));38         }39     public static Stock[] stocksystem = new Stock   [10];40         static{41     stocksystem[0]=new Stock("zhonghaifazhan",1,2.0);42     stocksystem[1]=new Stock("dongfengqiche",2,1.5);43     stocksystem[2]=new Stock("jinangangtie",3,1.8);44     stocksystem[3]=new Stock("zhongguoguomao",4,2.5);45     stocksystem[4]=new Stock("baoganggufen",5,2.7);46     stocksystem[5]=new Stock("huanengguoji",6,2.9);47     stocksystem[6]=new Stock("baoganggufen",7,3.3);48     stocksystem[7]=new Stock("shanghaidianli",8,3.5);49     stocksystem[8]=new Stock("zhongyuangaosu",9,3.2);50     stocksystem[9]=new Stock("shanghaidianli",10,1.7);  51 }52 }
      Stock

       

      程序分析:

    stock类是用来定义股票的一个类,有利息运算increase函数increase=(Math.random()-0.5)*0.2;,其中引用了random函数来确定股票的增长收入,以及每种股票最后写的那样stocksystem[0]=new Stock("zhonghaifazhan",1,2.0);,每种的价格最开始处于一个固定的值,以后可以在完善的过程中加入新函数,不仅仅是random自带的math函数,更多的是更多杂凑函数的组合,让股票类能更多的无序。

  • EqualizedWealthCard

    • 程序代码:

      1 package card; 2  3 import place.Landindex; 4 import PJ.Entrance; 5 import PJ.Player; 6  7 public class EqualizedWealthCard extends CardSystem { 8 //均富卡 9 String name="EqualizedWealthCard";10 String function="将所有人的现金平均分配";  11 String type="MagicCard";12 String range="其他玩家(无视距离)";13 EqualizedWealthCard(){14     int point=40;15 this.point=point;16 }   17 @Override18 public String getName() {19 20     return name;21 }22 23 @Override24 public String getFunction() {25     // TODO Auto-generated method stub26     return function;27 }28 29 @Override30 public String getType() {31     // TODO Auto-generated method stub32     return type;33 }34 @Override35 public int getPoint() {36     return point;37 }38 @Override39 public String getRange() {40     // TODO Auto-generated method stub41     return range;42 }43 @Override44 public void print(int location, int namei) {45     // TODO Auto-generated method stub46     int tmp=0;47     for(int i=0;i
      EqualizedWealthCard

       

    • 代码分析:

         这个代码程序是实现一个均富卡的功能,让所有玩家的资产平均分配。String name 是定义改卡片的名字,String function 是说明该卡片的功能,String type 是定义卡片的分类情况,String range定义了卡片的适用范围。getNamegetFuctiongetTypegetRange是依次对应这些定义的获取函数。`

    for(int i=0;i<Entrance.players.size();i++){ tmp+=Entrance.players.get(i).getCash();这段代码是实现对每个玩家现金求和

    tmp=tmp/(Entrance.players.size()这段代码是讲总资产平局分配

    for(int i=0;i<Entrance.players.size();i++){Entrance.players.get(i).setCash(tmp); }这段代码完成了将每个人的现金数更改为修改后的数目的功能。

  • BlackCard

    • 程序代码:

      1 package card; 2 public class BlackCard extends CardSystem{ 3     //黑卡 4 String name="BlackCard"; 5 String function="使第二天这支股票下跌10%";     6 String type="ToolCard"; 7 String range="特定的股票"; 8 BlackCard(){ 9     int point=20;10     this.point=point;11     }   12     @Override13 public int getPoint() {14     return point;15     }16     @Override17 public String getName() {18 19             return name;20         }21 22         @Override23 public String getFunction() {24     // TODO Auto-generated method stub25     return function;26 }27 28 @Override29 public String getType() {30     // TODO Auto-generated method stub31     return type;32 }33 34 @Override35 public String getRange() {36     // TODO Auto-generated method stub37     return range;38 }39 @Override40 public void print(int location, int who) {41     // TODO Auto-generated method stub42     System.out.print("该卡牌功能尚未开放,敬请期待");43 }44 }
      BlackCard

       

    • 程序分析

      该程序对应Black card,其功能是使某支股票价在第二天下跌10%。其中,@Override起到了方便代码检查和维护的功能。public String getName() {return name;};这段函数是为了获取这张卡片的名称。

      public String getFunction() {// TODO Auto-generated method stubreturn function;}以及后面的getType、gerRange功能和它类似,依次对应功能、类别、使用范围。 目前这张功能卡只完成了其模板的创建,主函数部分还未完成,所以该卡片的功能还不能在Jvaa程序上实现,我们组会在后续项目完善时将其补充完整。

  • MonsterCard

    • 程序代码:

      1  package card; 2  3 import PJ.Entrance; 4     import PJ.Player; 5 import place.Landindex; 6  7 public class MonsterCard extends CardSystem { 8 //怪兽卡 9 String name="MonsterCard";10 String function="该街道所有土地重置为初始状态,即1级";   11 String type="MagicCard";12 String range="停留地的整条街道";13 MonsterCard(){14     int point=20;15     this.point=point;16 }   17 @Override18 public String getName() {19 20     return name;21 }22 23 @Override24 public String getFunction() {25     // TODO Auto-generated method stub26     return function;27 }28 @Override29 public int getPoint() {30     return point;31 }32 @Override33 public String getType() {34     // TODO Auto-generated method stub35     return type;36 }37 38 @Override39 public String getRange() {40     // TODO Auto-generated method stub41     return range;42 }43 @Override44 public void print(int location, int who) {45     // TODO Auto-generated method stub46     Player playerow=new Player();47     for(int i=0;i
      MonsterCard

       

    • 代码分析:

            这张卡为怪兽卡,其功能是当玩家抽到该卡片时,玩家所处街道上的所有土地降为1级。与其他功能卡的程序类似,String name="MonsterCard";String function="该街道所有土地重置为初始状态,即1级";String type="MagicCard"; String range="停留地的整条街道"; 这些是定义该卡片的基本信息,包括名称、类别、功能、使用范围。      if(Entrance.players.get(i).getNamei() ==Landindex.mark[location].owner){ playerow=Entrance.players.get(i); Landindex.mark[location].level=1;先判断玩家的土地是否处在该街道段上。 如果是在该街道上,则将这块土地的等级降为1。for(int i=0;i<Entrance.players.size();i++) 加上该循环后,就完成了对每位玩家的检查和执行。

3.项目现实中的问题与解决

  • 首先是主要函数中的Entrance函数,因为游戏需要规定出参与游戏的人数,原计划是单独使用一个class文件用来定义玩家数量和初始金钱等,直接利用Entrance函数将其连接起来,但是发现发现如果将参与游戏的人数与Entrance函数连接起来会增大工作量,在维护起来也会存在一定的问题,于是就减少了游戏的参与人数,将玩家的初始数据归入Entrance函数中。

  • 在菜单的选项中,遇到的问题是如何让参与游戏的玩家能直接获得地图信息、使用道具或者看到玩家个人信息等问题。因为我们的程序没有实现界面化,如果在一个界面下就可以成功的显示出以上所提到的信息。我们的解决方案是,在PJ中加入一个MenuPrint函数,里面显示为菜单打印功能,在每一步掷骰子结束后都会自动跳出来这个菜单,共玩家选择。这样就解决了之前遇到的玩家没法直接查询信息的问题。

  • 在之前提到的彩票站(LotteryStation)对于金钱的计算,遇到的问题是在嵌套循环的时候有时候的金钱信息会发生错误,解决得问题是采用差额计算法,之前提到过解决办法,如果遇到金额小于购买彩票的金额是,在其之前加上一个循环语句,判断一下就可以解决。

  • Card方面,我们遇到如何在游戏的地图里获得卡牌,是选择随机出现还是有卡牌出售的地方,经过讨论,我们在地图里加一个Cardshop函数,当掷骰子到该处时候就可以选择购买卡牌,并在Player函数中记录该玩家的特殊卡牌功能。只需在CardShop中显示出卡牌的种类及功能,具体的在Card包中实现,每一个卡牌需要定义功能,使用对象等,在CardShop中用move()方法实现调用,就解决了问题。

4.项目展望与改进(共下一届同学参考)

  • 展望:

    我们原计划是希望有一个界面化,但是后来发现这个GUI界面化和简单的五子棋和贪吃蛇的界面不一样的。这个相较于内些复杂很多,所以希望如果有可能的话学习一下GUI界面化,对于这个游戏进行界面化设计运行程序的时候不单单在Idea的界面中,就会有质的改变。

  • 改进:

    在卡牌功能方面还有待提高,只有简单的几个卡牌,实现的功能不是很广泛,有时间的话在这方面应该还可以在改进一下。同样的在游戏的地图的设计方面,地图地点中由于编译能力的问题就没有实现很多其他种类的地方,像类似于Hospital函数、Bank函数、Park函数、Land函数、PolcieStation函数代码几乎是一样的,只是不同地名而已,所以在这方面丰富度不是很高,在这方面也是需要提高。

5.团队成员贡献与成绩分配

我们队一共4个人,团队总分4*25=100

团队成员 成员贡献 成绩分配
20144303石宇森 负责博客的记录、部分函数的编译、辅助项目的编译。 22分
20145301赵嘉鑫 负责博客的记录、项目主要代码的编译、资料查询等、对代码进行相应测试、对托管的代码进行检查与再编译等。 29分
20145307陈俊达 负责博客的记录、项目主要的代码编译、托管过的代码检查再编译z。 26分
20145335郝昊 负责主要博客记录、部分函数的编译、辅助项目的编译、其他程序的java语言翻译、代码的托管以及本次博客的主要撰写。
23分

转载于:https://www.cnblogs.com/Big-Hit/p/5599304.html

你可能感兴趣的文章
总结上海永辉云商高级前端职位面试题集
查看>>
中国计算机学会推荐国际学术会议和期刊目录
查看>>
文本元素
查看>>
各种可以远程
查看>>
对服务器的认识
查看>>
分治法实现1-N的数字按字典序全排列组合 Java语言
查看>>
序列化 与 反序列化
查看>>
购物车
查看>>
python基础(一)
查看>>
UI设计篇·入门篇·绘制简单自定义矩形图/设置按钮按下弹起颜色变化/设置图形旋转...
查看>>
linux 使用NSF 映射远程磁盘目录
查看>>
elasticjob 当当的分布式定时任务管理
查看>>
BZOJ 3438: 小M的作物( 最小割 )
查看>>
js性能优化-事件委托(2)
查看>>
Determine File Output Location
查看>>
51NOD 1068 Bash游戏 V3
查看>>
级联。。。
查看>>
socketserver用法列子
查看>>
网站链接被微信屏蔽拦截了怎么办?VJump帮你解除屏蔽
查看>>
用shell定义和访问数组
查看>>