找回密码
 立即注册
查看: 225|回复: 0

面向对象程序练习二——选择游戏

[复制链接]
发表于 2022-6-6 18:12 | 显示全部楼层 |阅读模式
面向对象思维的养成需要日积月累的练习与思考。继前面实现的游戏登录功能,我们可以在此基础上进一步完善该程序实现更多的功能。我们可以针对某一游戏玩法的实现(一个比牌小游戏——欢乐比拼)来设置到该情景中。

登录游戏后玩家即可以选择要玩的游戏->进入游戏->开始游戏->游戏ing->游戏结束。

下面就让我们来实现下一步功能——选择游戏~
项目实训——选择游戏(choosegame)


当玩家来到游戏大厅,成功登录游戏后,下一步就可以选择自己想玩的游戏,即选择游戏。
一、程序分析


写程序的第一步,当然就是我们的老盆友——程序分析。从面向对象的思维角度入手,分析与整理大致可分为以下几个步骤:理清功能、找对象->抽类、理清各个类中要实现的具体功能、画时序图/类图

下面我们来一一实现吧~

(1)理清功能

目标是实现玩家对游戏的选择,首先就要展示游戏类型列表,提示玩家进行选择,玩家输入选择,选择成功,进入该游戏

(2)找对象->抽类

登录成功玩家在游戏大厅操作——GameCenter类
游戏列表的存放——Constants类
展示游戏列表、提示玩家输入、得到玩家选择——Console类:实现展示列表的通用方法,以及对输入输出的封装

(3)理清各个类之间的关系以及要实现的功能

玩家登录成功后,在游戏大厅进行要玩游戏的选择,首先由游戏大厅向操控台(Console)调用show menu方法,操控台从Constants类获取菜单列表进行展示。随后玩家即可在游戏大厅进行选择:调用操控台的get choose方法,返回玩家的选择,最终得到游戏的实例对象game(该步归纳于下一章)。

(4)画类图or时序图

该功能只用到了三个类,时序图简单易懂,得图如下:


choosegame时序图

二、写代码


根据时序图,可以先从简单的部分写起,从局部->整体

首先就是Constants类,储存列表
val GAME_MENU= arrayOf("欢乐比拼","欢乐斗地主","四川麻将")
接着来到Console类里面实现展示列表以及得到结果方法,为了之后写程序扩展方便,考虑到不止该处要用到展示列表的方法,所以写一个通用方法更加方便~
var currentMenuList:Array<String> = arrayOf()//指向被输出列表的标记变量private fun showLineStar(){    "******************************".showWithEnter()}//展示格式:输出分割线fun showGameMenu(){   showLineStar()    currentMenuList= GAME_MENU    showMenu(GAME_MENU)    showLineStar()}private fun showMenu(menus:Array<String>){    val dollar=if (currentMenuList.contentEquals(TABLE_LIST))"$" else ""    for ((index,item) in menus.withIndex()){        "${index+1}.$item \t".showWithEnter()    }}//通用方法fun getChoice():Int{    while (true){        "请选择:".show()        try {            val choice=readLine()!!.toInt()            if (choice in 1..currentMenuList.size){                return choice            }        }catch (e:java.lang.Exception){            "输入不合法 ".show()        }    }}
游戏大厅GameCenter类调用方法,实现功能
fun chooseGame(){        showGameMenu()        getChoice()    }
登录游戏大厅+选择游戏程序运营结果截图:


运行结果截图

三、总结


选择游戏部分相对简单,用到的类也不多,一个程序中对于要重复用到的方法就可编译一个通用类出来,这里也很好的体现了面向对象的思想,给我们的开发减去了不必要的重复于冗长。

选择完游戏下一步即将进入游戏,之后的文章中就让我们来对其中一个游戏欢乐比拼(HappyPokerGame)一步一步进行具体的实现

路漫漫其修远兮,我们一同加油~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-19 06:14 , Processed in 0.097391 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表