C#面向对象编程之猜拳游戏实现方法
作者:shichen2014 发布时间:2021-11-17 23:25:52
标签:C#,面向对象,编程,游戏
本文实例讲述了C#面向对象编程之猜拳游戏实现方法。分享给大家供大家参考。具体实现方法如下:
1.需求
现在要制作一个游戏,玩家与计算机进行猜拳游戏,玩家出拳,计算机出拳,计算机自动判断输赢。
2.需求分析
根据需求,来分析一下对象,可分析出:玩家对象(Player)、计算机对象(Computer)、裁判对象(Judge)。 玩家出拳由用户控制,使用数字代表:1石头、2剪子、3布 计算机出拳由计算机随机产生 裁判根据玩家与计算机的出拳情况进行判断输赢。
3.类对象的实现
①.玩家类示例代码:
class Player
{
string name;
public string Name
{
get { return name; }
set { name = value; }
}
public int ShowFist()
{
Console.WriteLine("请问,你要出什么拳? 1.剪刀 2.石头 3.布");
int result = ReadInt(1, 3);
string fist = IntToFist(result);
Console.WriteLine("玩家:{0}出了1个{1}", name, fist);
return result;
}
/// <summary>
/// 将用户输入的数字转换成相应的拳头
/// </summary>
/// <param name="input">
/// <returns></returns>
private string IntToFist(int input)
{
string result = string.Empty;
switch (input)
{
case 1:
result = "剪刀";
break;
case 2:
result = "石头";
break;
case 3:
result = "布";
break;
}
return result;
}
/// <summary>
/// 从控制台接收数据并验证有效性
/// </summary>
/// <param name="min">
/// <param name="max">
/// <returns></returns>
private int ReadInt(int min,int max)
{
while (true)
{
//从控制台获取用户输入的数据
string str = Console.ReadLine();
//将用户输入的字符串转换成Int类型
int result;
if (int.TryParse(str, out result))
{
//判断输入的范围
if (result >= min && result <= max)
{
return result;
}
else
{
Console.WriteLine("请输入1个{0}-{1}范围的数", min, max);
continue;
}
}
else
{
Console.WriteLine("请输入整数");
}
}
}
}
②.计算机类示例代码:
class Computer
{
//生成一个随机数,让计算机随机出拳
Random ran = new Random();
public int ShowFist()
{
int result = ran.Next(1, 4);
Console.WriteLine("计算机出了:{0}", IntToFist(result));
return result;
}
private string IntToFist(int input)
{
string result = string.Empty;
switch (input)
{
case 1:
result = "剪刀";
break;
case 2:
result = "石头";
break;
case 3:
result = "布";
break;
}
return result;
}
}
③.裁判类示例代码 这个类通过一个特殊的方式来判定结果:
class Judge
{
public void Determine(int p1, int p2)
{
//1剪刀 2石头 3布
//1 3 1-3=-2 在玩家出1剪刀的情况下,计算机出3布,玩家赢
//2 1 2-1=1 在玩家出2石头的情况下,计算机出1剪刀,玩家赢
//3 2 3-2=1 在玩家出3布的情况下,计算机出2石头,玩家赢
if (p1 - p2 == -2 || p1 - p2 == 1)
{
Console.WriteLine("玩家胜利!");
}
else if (p1 == p2)
{
Console.WriteLine("平局");
}
else
{
Console.WriteLine("玩家失败!");
}
}
}
④.对象的实现:
static void Main(string[] args)
{
Player p1 = new Player() { Name="Tony"};
Computer c1 = new Computer();
Judge j1 = new Judge();
while (true)
{
int res1 = p1.ShowFist();
int res2 = c1.ShowFist();
j1.Determine(res1, res2);
Console.ReadKey();
}
}
希望本文所述对大家的C#程序设计有所帮助。
0
投稿
猜你喜欢
- 介绍前面一章说了AbstractApplicationContext中的refresh方法中的invokeBeanFactoryPostPr
- 我们经常在项目开放中需要进行很多配置, 那么这些配置基本上都是动态的, 如果我直接写在代码中, 修改起来很麻烦, 如果该配置在多处进行引用啦
- 前言在工作中遇到这样一个问题:开发过程中将数据库的账号、密码等信息配置在了一个单独的properties配置文件中(使用明文)。但运维人员要
- 本文基于jdk1.8进行分析。ReentrantLock是一个可重入锁,在ConcurrentHashMap中使用了ReentrantLoc
- 1、声明一个测试对象import java.time.LocalDate;import java.util.List;import lomb
- 1、Jetbrains官网下载IntelliJ IDEA1.1 官方网站http://www.jetbrains.com/idea/&nbs
- 在spring中有很多以XXXAware命名的接口,很多人也不清楚这些接口都是做什么用的,这篇文章将描述常用的一些接口。一,Applicat
- Threadlocal有什么用:简单的说就是,一个ThreadLocal在一个线程中是共享的,在不同线程之间又是隔离的(每个线程都只能看到自
- 一、String类String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象。java把Str
- 前言 在微信刚流行的时候,在摇一摇还能用来那啥的时候,我也曾深更半夜的拿着手机晃一晃。当时想的最多的就是
- 前言前一篇文章我们熟悉了HikariCP连接池,也了解到它的性能很高,今天我们讲一下另一款比较受欢迎的连接池:Druid,这是阿里开源的一款
- 整理文档,搜刮出一个java Servlet 实现动态验证码图片的代码,稍微整理精简一下做下分享。package com.hacker;im
- 本文实例讲述了Java实现的不同图片居中剪裁生成同一尺寸缩略图功能。分享给大家供大家参考,具体如下:因为业务需要,写了这样一个简单类,希望能
- 本文实例讲述了C#设计模式之Mediator中介者模式解决程序员的七夕缘分问题。分享给大家供大家参考,具体如下:一、理论定义中介者模式&nb
- 使用后台返回验证码图片,验证码存到session中后端实现校验,前端只展示验证码图片。本篇用SpringBoot Thymeleaf实现验证
- 抽象类(abstract):抽象类不能创建实例,它只能作为父类被继承。抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象。从多个具有
- 本文实例讲述了C#实现简单合并word文档的方法。分享给大家供大家参考。具体如下:using System;using System.Col
- 实现一个顺序表接口实现定义一个MyArrayList类,在类中实现以下函数public class MyArrayList {}数组的定义p
- 在此附上超详细Windows 10卸载JDK1.8教程超详细Windows 10卸载JDK1.8教程JDK1.8即为JDK8,JDK8是目前
- 本文实例讲述了spring mvc 实现获取后端传递的值。分享给大家供大家参考,具体如下:jsp页面怎么获取从后端传递过来的值?JSTL 方