文档章节

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

一贱书生
 一贱书生
发布于 2016/11/21 16:23
字数 496
阅读 2
收藏 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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java大数据转换16进制转10进制

public static void main(String[] args) {String hex = "0xdbf3accc683297cf0000";BigInteger amount = new BigInteger(hex.substring(2), 16);System.out.println(amount);......

任梁荣
昨天
1
0
OSChina 周六乱弹 —— 目测我们程序员丁克的几率不大

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @真Skr小机灵鬼儿:8.13分享Jocelyn Pook/Russian Red的单曲《Loving Strangers》 《Loving Strangers》- Jocelyn Pook/Russian Red 手机党少...

小小编辑
昨天
9
3
TypeScript基础入门 - 函数 - 剩余参数

转载 TypeScript基础入门 - 函数 - 剩余参数 项目实践仓库 https://github.com/durban89/typescript_demo.gittag: 1.2.1 为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能...

durban
昨天
1
0
OpenCV边缘检测算子原理总结及实现

1. 拉普拉斯算子 原理:是一种基于图像导数运算的高通线性滤波器。它通过二阶导数来度量图像函数的曲率。 拉普拉斯算子是最简单的各向同性微分算子,它具有旋转不变性。一个二维图像函数的拉...

漫步当下
昨天
0
0
Spring源码阅读——1

开始读Spring源码吧,看再多的技术博客,不如自己看一下~~~~~ Spring源码目前在github中,新版本基于gradle构建。所以阅读源码需要先安装github和gradle。 spring中git地址 1、安装git(略)...

叶枫啦啦
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部