Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 基于回合的多人热坐棋盘游戏的通用OOP范例_Cocoa_Oop_Object - Fatal编程技术网

Cocoa 基于回合的多人热坐棋盘游戏的通用OOP范例

Cocoa 基于回合的多人热坐棋盘游戏的通用OOP范例,cocoa,oop,object,Cocoa,Oop,Object,所以我正在做一个非常基本的回合制棋盘游戏,我试图找出构建它的最佳方式。我已经对它进行了三次重组。这是mac的可可项目 游戏开始时,每个玩家都有5000美元,并且有能力购买6种不同股票中的一些。每回合开始时,玩家掷3个骰子,决定股票价值如何变化,以及从股息中赚了多少钱(如果有的话)。当计时器用完时游戏结束,这是在游戏开始前设置的 我正处于编程的中间,我意识到我正在进行的方式可能没有优势。嗯,什么都行。:)快走 我试图坚持整个mvc范式,因此我的骰子角色生成器是我的模型,控制器与接口交互。我觉得我对

所以我正在做一个非常基本的回合制棋盘游戏,我试图找出构建它的最佳方式。我已经对它进行了三次重组。这是mac的可可项目

游戏开始时,每个玩家都有5000美元,并且有能力购买6种不同股票中的一些。每回合开始时,玩家掷3个骰子,决定股票价值如何变化,以及从股息中赚了多少钱(如果有的话)。当计时器用完时游戏结束,这是在游戏开始前设置的

我正处于编程的中间,我意识到我正在进行的方式可能没有优势。嗯,什么都行。:)快走

我试图坚持整个mvc范式,因此我的骰子角色生成器是我的模型,控制器与接口交互。我觉得我对mvc有很好的理解

我的应用程序委托调用主xib,它与我的“stockwindowcontroller”类交互,该类控制着其他一切。玩家窗口(我还没有这么做)会向玩家显示他的资产,并给他买卖的可能性。如果我现在使用的是stockwindowcontroller类,那么我必须将它放在stockwindowcontroller类下

我在想也许每转一圈都是自己的目标,因为有时候会有50圈。所以所有的东西都是从旋转物体出来的。这意味着一切都要重做,我想确保我没有找错方向。。。再一次。我从来都不擅长概念化OOP思维,如果这是非常明显的,请原谅我


谢谢你抽出时间

在进行mvc时,我通常从命令行视图开始,然后添加内容,直到事情稳定下来。然后添加gui内容。始终保持命令行视图和控制器,因为它们对测试非常有用

尝试从以下内容开始:

编辑:重构代码,以便观察者在玩家的钱发生变化或他破产时得到通知

import java.util.*;
class DiceRoller {
    DiceRoller(final int sides) {
        this(1,sides);
    }
    DiceRoller(final int dice,final int sides) {
        this.sides=sides;
        this.dice=dice;
    }
    int roll() {
        int sum=0;
        for(int i=0;i<dice;i++)
            sum+=random.nextInt(sides)+1;
        return sum;
    }
    final Random random=new Random();
    final int dice;
    final int sides;
}
class Stock {
    Stock(int price) {
        this.price=price;
    }
    int value;
    int dividend;
    final int id=ids++;
    final int price;
    static int ids;
    public String toString() {
        return ""+id+" "+value+" "+dividend;
    }
}
class Player {
    public void turn() {
        System.out.print("turn for player "+id);
        int die1=diceRoller.roll();
        System.out.print(", he rolls "+die1);
        money+=die1-5; // real simple for now
        System.out.println(", he has "+money);
    }
    public String toString() {
        String s=""+id+" $"+money;
        if(stocks.size()>0)
            s+=" stocks";
        for(Stock stock:stocks.keySet())
            s+=" "+stock+" "+stocks.get(stock);
        return s;
    }
    Map<Stock,Integer> stocks=new LinkedHashMap<Stock,Integer>();
    int money=10;
    final int id=ids++;
    DiceRoller diceRoller=new DiceRoller(6);
    static int ids;
}
class Model extends Observable {
    void init(int stocks,int players) {
        for(int i=0;i<stocks;i++)
            this.stocks.add(new Stock(random.nextInt(10)+1));
        for(int i=0;i<players;i++)
            this.players.add(new Player());
        setChanged();
    }
    void turn(Player player) {
        player.turn();
        setChanged();
        notifyObservers();
    }
    void busted(List<Player> busted) {
        if(busted.size()>0) {
            players.removeAll(busted);
            setChanged();
            notifyObservers();
        }
    }
    public String toString() {
        String s="";
        for(Stock stock:stocks)
            s+="stock "+stock+"\n";
        for(Player player:players)
            s+="player "+player+"\n";
        s=s.substring(0,s.length()-1); // removed last line feed
        return s;
    }
    Random random=new Random();
    final List<Stock> stocks=new ArrayList<Stock>();
    final List<Player> players=new ArrayList<Player>();
}
class CommandLineView implements Observer {
    @Override public void update(Observable observable,Object hint) {
        if(observable instanceof Model)
            display((Model)observable);
        else throw new RuntimeException("oops");
    }
    void display(Model model) {
        System.out.println("[update: "+model);
        System.out.println("end of update]");
    }
}
class Game {
    Game() {
        model=new Model();
        view=new CommandLineView();
        model.addObserver(view);
        model.init(4,3);
        model.notifyObservers();
    }
    void run() {
        for(round=0;model.players.size()>1;round++) {
            System.out.println("round "+round);
            for(Player player:model.players)
                model.turn(player);
            List<Player> busted=new ArrayList<Player>();
            for(Player player:model.players)
                if(player.money<=0) {
                    System.out.println("player "+player.id+" busted out.");
                    busted.add(player);
                }
            model.busted(busted);
            if(round>10) {
                System.out.println("breaking out");
                break;
            }
        }
        if(model.players.size()==1)
            System.out.println("the winner is "+model.players.get(0));
    }
    final Model model;
    Observer view;
    int player;
    int round;
}
public class So15578233 {
    void run() {
        game=new Game();
        game.run();
    }
    public static void main(String[] args) {
        new So15578233().run();
    }
    Game game;
}
import java.util.*;
类压路机{
骰子滚轴(最终内侧面){
这(1,侧面);
}
掷骰子(最终整数骰子,最终整数边){
这个。边=边;
这个。骰子=骰子;
}
int roll(){
整数和=0;
对于(int i=0;i0)
s+=“股票”;
for(Stock:stocks.keySet())
s+=“”+股票+“”+股票。获取(股票);
返回s;
}
Map stocks=newlinkedhashmap();
国际货币=10;
最终int id=ids++;
骰子滚筒骰子滚筒=新骰子滚筒(6);
静态int-id;
}
类模型扩展了可观察性{
void init(整数股,整数玩家){
for(int i=0;i1;round++){
系统输出打印项次(“四舍五入”+四舍五入);
用于(玩家:model.players)
模型。转身(球员);
List busted=new ArrayList();
用于(玩家:model.players)
如果(玩家10){
System.out.println(“爆发”);
打破
}
}
如果(model.players.size()==1)
System.out.println(“获胜者是”+model.players.get(0));
}
最终模型;
观察者观点;
国际球员;
整数轮;
}
公共类So15578233{
无效运行(){
游戏=新游戏();
game.run();
}
公共静态void main(字符串[]args){
新的So15578233().run();
}
游戏;
}

这太令人印象深刻了!你很快就完成了我游戏的内部工作。遗憾的是,我忘了在我的问题中提到我正在使用objective c,试图制作一个mac应用程序。我对java的语法没有任何经验,尽管它与c非常相似,我以前也处理过它。mvc迷你体系结构是基于observer设计模式的。ios示例位于,andhttp://www.cocoawithlove.com/2008/06/five-approaches-to-listening-observing.html