java面向对象猜拳游戏_面向对象猜拳游戏

面向对象介绍,类和对象

首先作为基础知识的回顾,我们可以看下我之前写过的文章:,思想的转变。

看完这两篇文章以后,我们看下如下的相关概念:

构造函数特点:

1.方法名称与类名称完全一样。

2.构造函数没有任何返回值,哪怕是void

3.构造函数的方法修饰符一般为public

当手动为类添加构造函数后,会覆盖默认的那个无参数的构造函数。

快捷写构造函数的方法:ctor两下tab键。

构造函数可以被重载。(只要参数列表不同即可。)

this表示当前对象。

"类"也是一种数据类型,是一种自定义数据类型,可以通过类声明该类类型的变量。

Teacher teacher = new Teacher("001", 10000);

Teacher t1;表示声明了一个Teacher类型的变量 t1;

new Teacher();表示创建了一个Teacher对象。

两句话连起来,这样理解上面的代码: 创建了一个Teacher对象【new Teacher("001", 10000);】,并将该对象赋值给了一个Teacher类型的变量teacher

下面我们用面向对象的思想做个简易计算器:

首先看下,面向过程写的计算器的思路:

c2f58b2c10b628e4657ae769c4907773.png

图一、简易计算器

我们再来看下封装之后的计算器的思路

bdfa6cecc2099ec96bff2cd76ae55da0.png

图二、封装计算器

14396ca6807128c4d81c06695b92d5a6.png

图三、猜拳游戏启动界面

猜拳游戏思路:

普通思维过程:我点击按钮的时候出石头、剪刀或布用1,2,3分别来代表上面的三个符号。

系统出,也是1,2,3来代表,但是系统是随机出的。

最后一判断就行了。

上面的是普通的思维过程,现在用面向对象的方法来写。

先想有几个对象,在哪几个类里面,这些对象有什么共同的特点

分出:电脑 玩家  裁判  三个类

怎么才能想到这三个类呢?

分析过程:

看到这个游戏后,参与游戏的有多少个对象呢?

看看这样想行不行?有两个人他们都出拳,我们把他们写成一个类。同时看到有石头、剪刀、布。我们写成一个类。显然像上面这么写是不行的,因为具体的出拳不是游戏的参与者。由于两个玩家的内部实现不一样,所以,我们不能把他们写到一个类里面。

大家再想一想,如果我把决定胜负的判断写到两个参与游戏的玩家之一里面可不可以呢?当然是不可以的,因为这样不公平了。

大家有没有感觉上面的分析过程想不到呢?没关系,慢慢来,

多做几个项目就好了。

下面我们做个简易版的猜拳游戏,如下图:

9a88fa6717ec62073a96585195809554.png

图四、简易版猜拳游戏

首先写好猜拳游戏的winform界面。

d1f06edbf8f231fc21d7457d90e63220.png

图五、猜拳游戏的winform

按照我们的分析思路写下代码,首先我们需要写一个玩家类。在这个类中有个接收用户出拳的属性。

还有个出拳的方法

这个方法有没有参数和返回值呢?答案是有的,用户点击哪个按钮就返回对应的值。所以,这个方法是有参数的。并且方法本身没有决定权。

写下电脑类

也是写个属性接收电脑的出拳结果。

想想这个方法有没有参数,有没有返回值?

这个方法中电脑是随机出拳的,所以,没有参数。有返回值。也是int。

4f5e60ac9724e794eea6c86dae350a25.png

图六、Player

8ceab6a739e78a869bd11200b303da8f.png

图七、Computer

裁判类里面有个决定谁输谁赢的方法。我们想一想这个方法有没有参数,有没有返回值?

答案是有参数的,参数就是玩家的选择结果和电脑随机的结果。

返回值我们用枚举表示,这样比较的方便。

在判断的时候我们找找规律,如下所示:

裁判类分析过程

1 表示:石头

2表示: 剪刀

3 表示:布

1》相等

平局

2》

在这块找找规律:

用户赢:

1   2 =-1

2   3=-1

3   1=2

if(user==1 && computer==2 ||

user==2&&computer==3 || user==3 &&

computer==1){

}

3》电脑赢

2    1 =1

3    2 =1

1    3 =-2

f3941ca3dc4e1ed312c546c667f82c21.png

图八、CaiPan

下面我们写程序调用这个类。

实例化一个玩家类

调用写好的方法,给它传参,返回值是个整型int

实例化一个电脑类

调电脑的方法,注意:没有参数,有返回值。

实例化一个裁判类

调裁判方法,传入两个参数,它的返回值类型是个枚举类型,

所以我们定义一个枚举来接收。

下面就是根据出拳结果显示不同的内容。

判断的过程已经在裁判类中完成了。

把玩家还有电脑的出拳结果也显示出来。

在同一段代码中,我们复制粘贴了两次,大家想一想,这样行么?根据变成的DRY原则:Don’t Repeat Yourself.

e5247812c13ad3d1757b3d01ef642502.png

图九、Form1

面向对象[oo]

oop面向对象编程(oop-> Object -Oriented Programming)

ooa 面向对象分析

ood 面向对象设计

ooad 面向对象分析与设计。

说到面向对象,我们想一想究竟什么是面向对象呢?

面向对象一种思维方式,把程序用现实生活模拟的方式。好处:让程序更灵活,更有可拓展性。

怎么才能实现这点呢?通过多态的方式实现。

这个需要仔细的区思考。

类、对象

1.什么是类

1>类是对某一类型对象的抽象,其中包含了该类型对象共有的属性和方法,类是抽象的。(如:医生,老师,军人)

2.什么是对象

2>对象是一个具体的事务,是某类的一个实例。对象是具体的。

3.类与对象的关系

类是由多个同类型对象抽象而来的,而对象在使用时需要通过类来产生new.

类是一种自定义数据类型,而为这种数据类型赋值,的结果就是该类型的对象。

Teacher t=new Teacher();

属性:

get

{

}

set

{

}

由一个私有字段,与两个公有的方法组成。

class Test

{

public Test()

{

Console.WriteLine("Hello World!");

}

}

Test t=new Test();

t.Test();

想想上面代码的执行结果是什么?

69be65c52bc7f54e3d25817aa579d5d7.png

图十、构造函数问题

上面是知识点的回顾:

下面我们再看看做过的猜拳游戏的代码简化:

这里我们演示下如何将建在之前文件上的猜拳游戏加载到另一个文件上面吧。

dd3f961e1740f09d213c6b8360a6e260.png

图十一、加载文件

我们发现执行代码中,只有参数:石头、剪刀、布不一样。所以我们提取出来一个方法。

9b7c3573588fd3ef778f7679f6f428b4.png

图十二、猜拳简化代码第一步

c606ae044fa36ce58347d994867804b9.png

图十三、猜拳简化代码第二步

406f620af7d6656f9cb6f68d1b05653c.png

图十四、猜拳简化代码第三步

当我们写到这步,发现这些代码都写死了,所以,要再简化一下子。

6b83328606e9984088c8662a9a9426f6.png

图十五、猜拳简化代码点击事件

我发现点这三个按钮执行的代码几乎是一样的,我不要点剪刀,和布的方法了。点石头绑定到的是btnRock_Click这个方法上,我让点剪刀的时候也绑定到这个方法上,点布也绑定到这个方法上面,现在我点剪刀,布,执行的都是点石头这个方法。

这个时候我们发现运行之后,点布还是剪刀的时候运行的都是石头的方法,那我们怎么解决这个问题呢?

873185e523bd85ca3a08f32c26a11caa.png

图十六、猜拳简化代码改变参数

有没有发现这有两个参数:object sender,EventArgs e.大家用过这两个参数么?

8368f37719a469d99c14f484da38fb06.png

图十七、猜拳简化代码通过事件源知道当前点击按钮

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值