文档章节

用面向对象思想设计奥赛罗游戏

一贱书生
 一贱书生
发布于 2016/11/21 16:23
字数 496
阅读 3
收藏 0

剖析:

奥赛罗有如下主要步骤:
1. Game()为主函数,来管理游戏中的所有活动
2.构造函数对游戏进行初始化
3.获取第一个玩家的输入
4.验证输入
5.更改棋盘格局
6.检验是否有人获胜了
7.获取第二个玩家的输入

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

  public class Question {

    private final int white = 1;

    private final int black = 2;

    private int[][]  board;

 

    /* Sets up the board in the standard othello starting positions,

     * and starts the game */

      public void start () { ... }

 

    /* Returns the winner, if any. If there are no winners, returns

     * 0 */

      private int won() {

    if (!canGo (white) && !canGo (black)) {

      int count = 0;

        for (int i = 0; i < 8; i++) {

          for (int j = 0; j < 8; j++) {

            if (board [i] [j] == white) {

              count++;

            }

              if (board [i] [j] == black) {

              count--;

            }

          }

          }

          if (count > 0) return white;

          if (count < 0) return black;

          return 3;

      }

      return 0;

    }

 

    /* Returns whether the player of the specified color has a valid

     * move in his turn. This will return false when

     * 1. none of his pieces are present

     * 2. none of his moves result in him gaining new pieces

     * 3. the board is filled up

     */

    private boolean canGo(int color) { ... }

 

    /* Returns if a move at coordinate (x,y) is a valid move for the

     * specified player */

    private boolean isValid(int color, int x, int y) { ... }

 

    /* Prompts the player for a move and the coordinates for the move.

     * Throws an exception if the input is not valid or if the entered

     * coordinates do not make a valid move. */

    private void getMove (int color) throws Exception { ... }

 

    /* Adds the move onto the board, and the pieces gained from that

     * move. Assumes the move is valid. */

    private  void add (int x, int y, int  color) { ... }

 

    /* The actual game: runs continuously until a player wins */

      private void game() {

        printBoard();

      while (won() == 0) {

          boolean valid = false;

          while (!valid) {

          try {

              getMove(black);

              valid = true;

          } catch (Exception e) {

              System.out.println (“Enter a valid coordinate!”);

          }

          }

          valid = false;

          printBoard();

          while (!valid) {

          try {

              getMove(white);

              valid = true;

          } catch (Exception e) {

              System.out.println (“Enter a valid coordinate!”);

          }

          }

          printBoard ();

      }

 

      if (won()!=3) {

        System.out.println (won () == 1 ? “white” : “black” +

                   “ won!”);

      } else {

        System.out.println(“It’s a draw!”);

        }

    }

  }

 

参考:http://wenku.baidu.com/view/47eda066f8c75fbfc67db27f.html

© 著作权归作者所有

共有 人打赏支持
一贱书生
粉丝 19
博文 724
码字总数 600123
作品 0
Silverlight游戏设计(Game Design):(五)面向对象的思想塑造游戏对象

传说,面向对象的开发模式最初是因为程序员偷懒而不小心诞生的。发展至今,人们从最初的热忠于讨论某某语言是否足够面向对象到现在开始更广泛的关注面向对象的思想而不是具体内容。面向对象的...

晨曦之光
2012/03/09
0
0
【blade04】用面向对象的方法写javascript坦克大战

前言 javascript与程序的语言比如C#或者java不一样,他并没有“类”的概念,虽然最新的ECMAScript提出了Class的概念,我们却没有怎么用 就单以C#与Java来说,要到真正理解面向对象的程度也是...

范大脚脚
2017/11/16
0
0
不要用面向对象编程分散新手程序员的注意力

来源:Ackalrix博客【http://www.ackarlix.com】 编者按:原文作者James Hague是一位修复性程序员(recovering programmer),从上世纪80年代起开始设计视频游戏,属于发烧友级别,用汇编语言...

Ackarlix
2011/03/30
234
1
javascript设计模式前言

设计模式理解 所有设计模式的实现都要遵循一个原则:即“找出程序中变化的地方,并将变化封闭起来”一个程序的设计总是可以分为可变的部分和不变的部分。当我们找出可变的部分,并且把这些部...

stone_
2016/05/26
39
0
软件工程——面向对象设计

说到面向对象我们都很熟悉,刚刚结束的vb就是面向对象的编程语言。对象是指类的实例,面向对象程序设计是一种程序设计范型,也是一种程序开发的方法。它把对象作为程序的基本单元,将程序和数...

邵鸿鑫
2013/12/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

线性一致性和 Raft

作者:沈泰宁 在讨论分布式系统时,共识算法(Consensus algorithm)和一致性(Consistency)通常是讨论热点,两者的联系很微妙,很容易搞混。一些常见的误解:使用了 Raft [0] 或者 paxos ...

TiDB
24分钟前
0
0
兄弟连区块链教程以太坊源码分析core-state-process源码分析

## StateTransition状态转换模型 /* The State Transitioning Model 状态转换模型 A state transition is a change made when a transaction is applied to the cu......

兄弟连区块链入门教程
26分钟前
0
0
linear-gradient渐变中的参数

在看张鑫旭的博客 遇到渐变数值后面带参数不太理解 @supports (-webkit-mask: none) or (mask: none) { .box { border: none; background: linear-gradient(to bottom, #34538...

红羊在厦门
27分钟前
0
0
Python yagmail模块自动发邮件

Python发邮件yagmail模块 import yagmail#连接服务器yag=yagmail.SMTP('xx@163.com','yy','smtp.163.com')#邮箱正文contents=["test","email send"]#发送邮件#yag.send('...

小白兔_球球
28分钟前
1
0
pada mysql

CREATE SCHEMA `exchange` DEFAULT CHARACTER SET utf8mb4 ;

qwfys
37分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部