手机游戏编程基础(一)
第一讲:棋牌类游戏基础原理
主讲人:韩磊
主要内容
棋牌游戏的简介
棋类游戏的运行原理
棋类游戏的代码构架,兵将棋示例
什么是棋牌游戏?
棋盘游戏和牌类统称棋牌游戏。棋牌类从明清开端一度昌盛,触及赌博等。现代棋牌游戏以休闲为主,在华语区影响较深的主要有扑克、斗地主、麻将、中国象棋、中国跳棋、军棋、黑白棋、五子棋等。
棋牌类游戏的分类
棋盘游戏:
中国象棋、四国军旗、飞行棋、跳子棋、五子棋、围棋、国际象棋。
其中牌类游戏中又分扑克和麻将:
扑克游戏:斗地主、跑的快、晋级、拱猪、锄大地、跑胡子、三打一、桥牌、打滚子、干瞪眼、双扣。
麻将游戏:四川麻将、国际麻将、台湾麻将、欢乐麻将、二八杠。
经典游戏——斗地主
扑克游戏,玩法简单,文娱性强,老少皆宜。该游戏由三个人玩,用一副牌,共54张,每局牌有一个玩家是“地主”,地主为一方,其他两家农民为一方,双方对战,先出完牌的人所代表的一方获胜。由于每一局“地主”、“农民”都会有变化,所以对立性和配合性都很强。斗地主,包括普通斗地主、特征CT斗地主和超级斗地主,在游戏里参加了特征任务,玩家在游戏中完成规则的任务,还有额外的奖励奉送,任务有运气,有技术,其乐无量。
经典游戏——麻将
麻将来源于中国,属皇家和王公贵族的游戏,其历史可追溯到三四千年前。麻将的游戏人数为4人,分别为东、南、西、北,其中一家为庄家,其他为旁家。每人手里抓13张牌,经过吃牌、碰牌、杠牌等方式,使手牌依照相关规则的牌型条件和牌,先和牌者胜出。CT麻将,添加了麻将的文娱性和兴趣性,更有哈尔滨麻将和上海麻将等中央特征麻将。
经典游戏——扑克
扑克的来源众口一词,但它却是盛行于全世界的一种文娱游戏。玩法多种多样,休闲文娱,精彩刺激。 至尊五张不只需求技巧更靠运气,可谓是理想人生的缩影。 德州扑克,易学难精,被称为是“学一时,精一世”的经典扑克游戏。 十三支,在理牌的过程中不但充溢乐趣,也是对玩家理牌技术和实力的考验。 更有智勇三张、角斗士、晋级和锄大地,缤纷游戏,不容错过。
经典游戏——象棋
“运筹帷幄之中,决胜千里之外”的中国象棋,是棋艺的比拼,更是一种把握棋局的才能。中国象棋,给玩家一个愈加公平的对弈空间。四国军旗,由于不能看棋子,使其更具有应战性。军旗游戏支持四国大战,相对的两家协作与左右方玩家对立,配合战役的乐趣更是其他游戏不能领会的。
棋类游戏什么样子?
有个棋盘(场景,舞台)
黑白棋子(玩家,演员)
一套规则(算法,剧情)
牌类游戏什么样子?
桌子,展示扑克
地主和农民以及手中的牌
地主农民的身份区别以及大小牌规则
棋类游戏学习案例——兵将棋
游戏简介
“兵将棋”源于山东民间棋牌游戏,是乡村闲暇之时最受欢迎的棋牌游戏之一。农闲之时,众人齐聚大街之上,以石为凳以地为盘,其乐无穷。现对其进行整理,重新命名为“兵将棋”。兵者,难敌将,只能采用人海战术,把将包围住即可胜利。将者,武艺高强,手持利刃远可斩兵,歼灭兵为赢,然近却施展不开,有被兵包围的危险。虽然简单几个棋子,但是其中可有千万种变化,可施展无数战术,内涵绝不逊于围棋象棋之属。
先分析兵将棋的游戏规则
一、将(白棋)正常每次可走一格,不可跳跃任一方棋子,如果与兵(黑棋)隔一空格即可吃掉兵(黑棋),吃光为赢。被兵(黑棋)困住无路可走为输。
二、兵(黑棋)每次可走一格,不可跳跃任一方棋子,以围堵将(白棋)为目的,把将(白棋)团团堵住为赢,被吃光为输。
三、游戏分为单人游戏(人机对战)和多人游戏(人人对战),角色可选。游戏没有时间限制,游戏进行中,任意时刻可以开始新局,悔棋。一旦游戏结束,悔棋会失效,重新开始游戏方可使用。
确定游戏编程模块
游戏玩家
玩家基础类BasePlayer
电脑玩家的类ComputerPlayer
游戏场景
游戏视图GameView
游戏规则
棋走法的规则ChessRule
人工智能
人工智能AIPlayer
以人为本——游戏玩家需要什么
玩家类BasePlayer、ComputerPlayer
玩家的类,拥有一个玩家所具有的一系列属性和动作
BasePlayer
Int playerID 玩家的角色
boolean isEnable是否有控制权
Void selectPoint()选择棋子
Void runPoint() 走棋
Void regretPoint() 悔棋
Void win() 赢棋
ComputerPlayer
Int playerID 玩家的角色
boolean isEnable是否有控制权
Void selectPoint()选择棋子
Void runPoint() 走棋
Void regretPoint() 悔棋
Void win() 赢棋
后备充足——游戏场景提供各种杂货
游戏视图GameView
游戏视图的类,主要提供画图方法和处理点击事件
GameView
Int[ ][ ] map 棋盘的布局
void drawChessBoard(Canvas canvas) 画棋盘
void drawQiZi(Canvas canvas) 画棋子
int[] getPos(MotionEvent e) 根据点击屏幕获得棋子
没有规矩不成方圆——规则类
游戏规则ChessRule
游戏规则的类,主要约束棋的走法
ChessRule
private int[][] map;//棋盘的布局
private int fromX;
private int fromY;
private int toX;
private int toY;
private int moveChessID;//起始位置是什么棋子
private int targetID;//目的地是什么棋子或空地
Boolean canMove() 能不能走
与电脑对战——人工智能类
人工智能类AIPlayer
人工智能的类,主要用于人机对战时电脑的思考走棋
AIPlayer
int[][] qizi 当前棋局的信息
List<ChessMove> allPossibleMoves(int[][] map, int chessRole)
获得所有走法
ChessMove searchAGoodMove(int[][] qizi, int chessRole)
选择一个最优的走法
游戏构架分析
棋走法规则
ChessRule
游戏视图
GameView
人工智能
AIPlayer
玩家A
BasePlayer
玩家A
BasePlayer
人类玩家A
BasePlayer
人类玩家B
BasePlayer
人类玩家Q
BasePlayer
电脑玩家C
ComputerPlayer
选棋子,走棋
可以走
改变视图
判断输赢
停止玩家A
解锁玩家B
不是人为选择,而是电脑选择
注意事项
屏幕的问题,3格,4格,5格,6格,7格
状态量的问题,多了容易乱
牌类游戏——斗地主
敬请期待……