弱鸡小富翁

简单的棋盘

课程的理解

在这几次的使用类,构建类间的关系实践中,已经懂得一部分类的概念,也能构建相对规范实用的类。类图的画法也基本上可以分辨得出来,但是有几种自己实践中没用到的,印象不深,还得翻一翻书才能分辨。使用类可以使得整个代码的结构清晰,哪一部分的功能调用哪一个类,这样在出现问题的时候,能够精准快速地找到问题和改正问题。当然不仅如此,还有要添加新功能,还是修改一些方法,直接在类中修改,而不需要每个传递到的地方都要修改,很大地提高了效率。在开始作业前,我考虑了Map类需要有哪些方法什么变量,进而将Map类分割成由Zone类组成,再将两者关系结构考虑清楚,还有游戏者Role的实现。

设计实现

如图所示的各类间关系,MapGui调用了Dice类,Role类,Map类,Map类调用Zone类。各类间所带方法和参数如图所示。

代码说明

1.Dice.java

//骰子类的实现
public class Dice {
    private  int faceValue;  //定义骰子面值

    public Dice(){
        faceValue = (int)(Math.random() * 6) + 1;  //获得一    个1-6的随机数
    }
    public void roll(){  //摇骰子
        faceValue = (int)(Math.random() * 6) + 1;
    }

    public  void unnormalroll(){  //摇不出4的骰子
        while(faceValue==4){
            faceValue = (int)(Math.random() * 6) + 1;
        }
    }

    public int getValue(){  //获得骰子数值
        return faceValue;
    }
}

2.Role.java

public class Role {
    private String name;
    private int money = 0;
    private int location = 0;

    public Role(String name,int money) {
        this.name = name;
        this.money = money;
    }

    public String getName() {
        return this.name;
    }
    public void changMoney(int money) {
        this.money += money;
    }

    public int getMoney() {
        return this.money;
    }

    public void move(int i,int limit) {
        this.location = this.location +i;
        if(this.location > limit-1 ) {
            this.location = this.location-limit+1;
        }
    }

    public int getlocation() {
        return this.location;
    }
}

3.Zone.java

public class Zone {
    private int price = 0;
    private int fee = 0;
    private String owner = null;

    public Zone(int price) {
        this.price = price;
        this.fee = (int)(price * 0.1);
    }

    public String showOwner() {
        return this.owner;
    }

    public int showPrice() {
        return this.price;
    }

    public int showFee() {
        return this.fee;
    }

    public void changOwner(String owner) {
        this.owner = owner;
    }
}

4.Map.java

public class Map {
    private int num;
    private Zone zone[]; 

    public Map(int num){
        this.num = num;
        zone = new Zone[num];
    }

    public void modul1() {
        int i;
        zone[0] = new Zone(0);
        for(i=1;i<num;i++) {
            switch(i%5) {
                case 0: zone[i] = new Zone(1000);break;
                case 1: zone[i] = new Zone(2000);break;
                case 2: zone[i] = new Zone(3000);break;
                case 3: zone[i] = new Zone(4000);break;
                case 4: zone[i] = new Zone(5000);break;
            }
        }
    }

    public int zoneValue(int i) {
        return zone[i].showPrice();
    }

    public int zoneFee(int i) {
        return zone[i].showFee();
    }

    public String zoneOwner(int i) {
        return zone[i].showOwner();
    }

    public void zoneOwe(int i,String owner) {
        zone[i].changOwner(owner);
    }
}

5.MapGui.java

import java.awt.Color;
import java.awt.EventQueue;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import java.awt.Font;
import javax.swing.SwingConstants;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class MapGui {

    private JFrame frame;
    private int[] setting = {4,50000,20};
    private Role[] role;
    public String name[]= {"丁丁","迪西","拉拉","小波"};
    public static int i=1,round=1;
    /**
     * Launch the application.
     */
    public static void main(String[] args) { 

        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    MapGui window = new MapGui();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
   }
    /**
     * Create the application.
     */    

    public MapGui() {
        initialize();
    }
    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        JLabel[] jLabel = new  JLabel[26];
        Map map = new Map(26);
        Dice dice = new Dice();
        JLabel lblNewLabel_2 = new JLabel("\u7B5B\u5B50\u56FE\u7247");
        ImageIcon[] image = new ImageIcon[7];
        image[0] = new ImageIcon("D:\\Desktop\\dice\\0.gif");
        for(int j=1;j<7;j++)
            image[j] = new ImageIcon("D:\\Desktop\\dice\\"+j+".png");

        map.modul1();

        frame = new JFrame();
        frame.setTitle("弱鸡小富翁");
        frame.setResizable(false);
        frame.setBounds(100, 100, 1284, 720);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JPanel panel = new JPanel();
        panel.setBounds(0, 0, 1280, 720);
        frame.getContentPane().add(panel);
        panel.setLayout(null);

        for(i=0;i<26;i++) {
            jLabel[i] = new JLabel();
            jLabel[i].setOpaque(true);
            jLabel[i].setBackground(Color.WHITE);
            jLabel[i].setFont(new Font("宋体", Font.BOLD, 12));

            if(i != 0) {
                jLabel[i].setText("<html><body><center>区域"+i+"<br>" + "地价为:" +map.zoneValue(i)+"<br>如果有人拥有<br>您将付"+map.zoneFee(i)+"元</center></body></html>");
            }
            if(i == 0) {
                jLabel[i].setText("    起点");
                jLabel[i].setBounds(1065, 514, 87, 84);
            }else if(i < 9) {
                jLabel[i].setBounds(1065-97*i, 514, 87, 84);
            }else   if(i < 13) {
                jLabel[i].setBounds(289, 420-94*(i-9), 87, 84);
            }else if(i < 22) {
                jLabel[i].setBounds(289+97*(i-13), 44, 87, 84);
            }else{
                jLabel[i].setBounds(1065, 138+94*(i-22), 87, 84);
            }  

            panel.add(jLabel[i]);
        }

         JPanel panel_1 = new JPanel();
         panel_1.setBounds(31, 115, 224, 501);
         panel.add(panel_1);
         panel_1.setLayout(null);

         JLabel lblNewLabel_1 = new JLabel("  个人信息面板");
         lblNewLabel_1.setFont(new Font("宋体", Font.BOLD, 24));
         lblNewLabel_1.setBounds(10, 10, 204, 49);
         panel_1.add(lblNewLabel_1);

         JLabel Label_name = new JLabel("\u4EBA\u7269\u540D\u79F0\uFF1A");
         Label_name.setFont(new Font("宋体", Font.BOLD, 15));
         Label_name.setBounds(10, 69, 197, 30);
         panel_1.add(Label_name);

         JLabel Label_money = new JLabel("\u4EBA\u7269\u91D1\u94B1\uFF1A");
         Label_money.setFont(new Font("宋体", Font.BOLD, 15));
         Label_money.setBounds(10, 108, 197, 30);
         panel_1.add(Label_money);

         JLabel Label_location = new JLabel("\u4EBA\u7269\u4F4D\u7F6E\uFF1A");
         Label_location.setFont(new Font("宋体", Font.BOLD, 15));
         Label_location.setBounds(10, 146, 197, 30);
         panel_1.add(Label_location);

         JLabel Label_info = new JLabel("回合:   - 第  号投掷");
         Label_info.setFont(new Font("宋体", Font.BOLD, 15));
         Label_info.setBounds(10, 209, 204, 30);
         panel_1.add(Label_info);

         JButton useDice = new JButton("使用筛子");
         useDice.setVisible(false);
         i=1;
         useDice.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent arg0) {
                 int j=0;

                 dice.roll();
                 dice.getValue();
                 lblNewLabel_2.setIcon(image[dice.getValue()]);              

                 role[i-1].move(dice.getValue(),26);
                 if(map.zoneOwner(role[i-1].getlocation()) == null || "".equals(map.zoneOwner(role[i-1].getlocation()))) {
                     role[i-1].changMoney(-1*map.zoneValue(role[i-1].getlocation()));
                     map.zoneOwe(role[i-1].getlocation(),role[i-1].getName());
                 }else if(map.zoneOwner(role[i-1].getlocation()) != role[i-1].getName()) {
                     role[i-1].changMoney(-1*map.zoneFee(role[i-1].getlocation()));
                     j++;
                 }else {
                     role[i-1].changMoney(j*map.zoneFee(role[i-1].getlocation()));
                     j=0;
                 }
                 Label_name.setText("人物名称:"+ role[i-1].getName());
                 Label_money.setText("人物金钱:"+role[i-1].getMoney());
                 Label_location.setText("人物位置:"+role[i-1].getlocation()+"区域");
                 Label_info.setText("回合:"+round+" - 第"+i+"号投掷");
                 if(i < setting[0]) {
                     i++;
                 } else {
                     i=1;
                     round++;
                     if(round > setting[2]) {
                         int[] rank = {0,1,2,3};
                         int[] store = {role[0].getMoney(),role[1].getMoney(),role[2].getMoney(),role[3].getMoney()};
                         for(int z1 = 0;z1 < 3;z1++) {
                             for(int z2 = z1;z2 < 4;z2++) {
                                 if(store[z1]<store[z2]) {
                                     int t =store[z1];
                                     store[z1]=store[z2];
                                     store[z2]=t;
                                     t=rank[z1];
                                     rank[z1]=rank[z2];
                                     rank[z2]=t;
                                 }
                             }
                         }

                         lblNewLabel_1.setText("    游戏结束");
                         Label_name.setText("No.1:"+role[rank[0]].getName()+role[rank[0]].getMoney());
                         Label_money.setText("No.2:"+role[rank[1]].getName()+role[rank[1]].getMoney());
                         Label_location.setText("No.3:"+role[rank[2]].getName()+role[rank[2]].getMoney());
                         Label_info.setText("No.4:"+role[rank[3]].getName()+role[rank[3]].getMoney());
                         round = 1;
                         useDice.setVisible(false);
                         lblNewLabel_2.setVisible(false);
                     }
                 }

             }
         });
         useDice.setBounds(67, 385, 93, 39);
         panel_1.add(useDice);

         lblNewLabel_2.setIcon(new ImageIcon("D:\\Desktop\\dice\\0.gif"));
         lblNewLabel_2.setBounds(57, 249, 105, 107);
         panel_1.add(lblNewLabel_2);

         JButton button = new JButton("开始/重置");
         button.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent arg0) {
                 useDice.setVisible(true);
                 lblNewLabel_1.setText("  个人信息面板");
                 lblNewLabel_2.setIcon(new ImageIcon("D:\\Desktop\\dice\\0.gif"));
                 lblNewLabel_2.setVisible(true);
                 Label_name.setText("人物名称:");
                 Label_money.setText("人物金钱:");
                 Label_location.setText("人物位置:");
                 Label_info.setText("回合:  - 第  号投掷");

                 role = new Role[setting[0]];
                 for(int i=0;i<setting[0];i++) {
                     role[i]=new Role(name[i],setting[1]);
                 }
             }
         });
         button.setBounds(10, 434, 93, 39);
         panel_1.add(button);

         JButton button_1 = new JButton("\u9000\u51FA\u6E38\u620F");
         button_1.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e) {
                 System.exit(0);
             }
         });
         button_1.setBounds(121, 434, 93, 39);
         panel_1.add(button_1);

         JLabel lblNewLabel = new JLabel("New label");
         lblNewLabel.setIcon(new ImageIcon("D:\\Desktop\\dice\\background.jpg"));
         lblNewLabel.setBounds(0, -23, 1280, 720);
         panel.add(lblNewLabel);
         }
}

测试运行

由MapGui设置setting数组来决定游戏的初始参数(在这里,游戏人数4,名称分别为丁丁,迪西,拉拉,小波,初始金币为50000,回合数为20)

小结

个人在GUI界面方面有所缺漏,难以独立完成,通过参照子琦大佬的模式,模仿其中运行的方式,从而适配自己的结构,也改进了其中一些方式,缩减一半代码量。基本上还是在图形界面消耗的时间最多。

时间: 2024-11-05 14:59:26

弱鸡小富翁的相关文章

弱鸡的关于类似适配器模式的思考

首先,在思维混乱的情况下写出来的代码毫无维护性可言,顺着逻辑直接一套三层循环嵌套下来..所以这是一个提高设计思想的机会. 重新省视一下逻辑 需求很简单明确: 查询机构的排期,并按照格式展现出来. 需要考虑的唯二障碍: 1.不同机构的接口不同 2.不同机构返回的数据格式不一样 好消息是: 数据库里已有不同机构的标识,也就是说,应该查询哪个接口是明确的 首先脱离各种设计模式,以最弱鸡的原始思维来思考设计逻辑 第一步: 筛选机构,获取数组数据.我需要的数据只有:用来展示的机构名称,机构的对接标识,机构

微信公众平台消息接口开发 小黄鸡(小贱鸡)机器人 微信公众平台 公众号聊天机器人 ,消息,接口,小黄鸡,小贱鸡,机器人

第一部分 基于模拟请求的方式 一.模拟请求数据 先看一下小黄鸡的网页版界面 我们通过模拟http请求来实现,上面对话抓包如下: 发送消息的包 接收消息的包: 根据上面的包,模拟发起请求如下: 二.与微信对接 小黄鸡还可以使用API方式调用,但免费时间有限,代码和上面基本一样,就不多写了. 三.演示效果 第二部分 基于接口的方式 一.申请小黄鸡接口SimSimi,发音为〝shim-shimee〞,中文翻译:小黄鸡,由韩文simsim(??)演变而成. “??”原意为“无聊”.SimSimi 由IS

中证红利指数基金,弱鸡一只?干货篇!

作者:牛大 牛大的价值理念:分享自己,帮助大家,稳中取胜. 我们会一直陪伴朋友们:每天五分钟,投资你自己.相信大家将来都能不为金钱所迫,生活更加美好! 最近,有朋友向牛大反馈,吐槽咱们定投的中证红利是只弱鸡(基),一直涨不动... 今天,牛大和朋友们聊一聊中证红利指数基金. 看看是一只弱鸡,还是一条...咸鱼 首先,向广大人民群众科普一下概念.(大神此处可以跳过...) 中证红利指数以沪深A股中现金股息率高.分红比较稳定.具有一定规模及流动性的100只股票为成分股,采用股息率作为权重分配依据,以

acm弱鸡的经历总结

本文地址:https://www.cnblogs.com/maplefighting/p/8007456.html 没啥成绩,大二三拿过省赛银,然后大三大四总共打了两场ccpc和两场icpc,都是一轮游.(虽然已经超过往届师兄的记录,但是还是贼菜,主要没系统的练习,氛围也不行,还tm分校区) 对于一个财经类弱校,虽然有acm社团,但是对我基本没什么用,主要得靠自觉以及坚持. 大一寒假看了紫书,大一暑假看了大白书,大二寒假看了挑战程序设计竞赛.在校却没怎么学习算法,没怎么敲题.而且书只是看了,没怎

针对“辣鸡小游戏”的刷级脚本

点击下载zip就送屠龙宝刀(Version 1.2) 顺便膜一波orz::Kevin

我是弱鸡,我是弱鸡。。。求助求助

输入一行数字,如果我们把这行数字中的'5'都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以'0'开头,这些头部的'0'应该被忽略掉,除非这个整数就是由若干个'0'组成的,这时这个整数就是0). 你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出.Input 输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000. 输入数据保证:分割得到的非负整数不会大于100000000:输入数据不可能全由'5'组成. Output 对于每个测

一名Android开发者的微信小程序填坑之路(1)

前言 首先要声明的是,我是一名 Android 开发者,之前基本没有前端开发经验,甚至连 JS ,HTML 都是为了开发小程序现学的一些皮毛--所以文章中所提到的一些点也许在资深前端开发者看来只是小case,但是站在一个 Android 开发者的角度来看确实是大坑. 前面就不说太多东西了,文章的末尾再谈谈我对小程序的一些看法--这篇文章主要是谈谈在开发小程序的过程中遇到的一些坑. PS:推荐一下我写的一个微信小程序版的Gank客户端:wechat-weapp-gank 正文 1,获取小程序开发工

由一只辣鸡到苦苣的OI心路历程

这里jzyz辣鸡一只,OI是,文化课也是. 初中的时候偶尔想过自己的未来,辣个时候我还是个每天晚上熬夜玩电脑的弱鸡,我就想着:计算机不错啊...要么学一下编程?然而并没有付诸行动.我也听过别人说jzyz有个OI的培训班,然而因为距离远,并没有去. 所以我就来了一中.缴费的时候附有一张OI招生的说明,我就去报了名. 嗯那时候的我还是满怀着信心的. 开始培训的第一个星期,机房里面的好多人都在浮躁什么的,我并没有管,刷题量增加的也贼快= =那个时候还有满机房的人啊...那一星期我只学了写基础的东西,甚

新生的一个小目标

来到马帮后,先定一个小目标 这是我个人比较喜欢的一个动漫里的人物,名字叫做黑崎一护,不仅是因为他卍解的时候很帅,更多的是从最初的弱鸡,到最后的尸魂界最强,经历了很多的磨练.在现实生活中也不例外,每个人也需要不断地让自己变强,才能保护自己想要保护的人,这也是我来马哥教育的初衷,不想再碌碌无为,当一个平凡的人,想要保护自己爱的人,当然也是为了赚更多的钱. <img src="1.jpg" width = "80%"/> 学习注定是痛苦的,这也是毋庸置疑的事情