zoukankan      html  css  js  c++  java
  • C# Winform学习--- 实现石头剪刀布的游戏

    本文使用winform实现简单的石头剪刀布的游戏,主要实现,电脑随机出拳,玩家手动点击出拳;实现简易背景图片3秒切换;简易统计信息。

    1、效果图

     

    2.实现代码

    新建一个windows窗体程序,用数字1代表石头,用数字2代表剪刀,用数字3代表布,结果取玩家和电脑出拳之差,有三种结果

    • 玩家赢: -1,2
    • 平手: 0
    • 玩家输: 其它值

    新建3个类:

    1)Computer.cs 电脑随机出拳

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace 石头剪刀布
    {
        class Computer
        {
    
            public  string Fist
            {
                get;
                set;
            }
    
    
            public int ShowFist()
            {
                Random rnd = new Random();
                int fist = rnd.Next(1, 4);
                switch (fist)
                {
                    case 1: Fist = "石头"; break;
                    case 2: Fist = "剪刀"; break;
                    case 3: Fist = ""; break;
                }
                return fist;
            }
    
        }
    }

    2)、Judge.cs 裁判类 判断输赢

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace 石头剪刀布
    {
    
        class Judge
        {
    
            public enum RESULT
            {
                玩家赢,
                电脑赢,
                平手
            }
    
            public static RESULT WhoWin(int playerNum, int computerNum)
            {
                int result = playerNum - computerNum;
                if (result == -1 || result == 2)
                {
                    return RESULT.玩家赢;
                }
                else if (result == 0)
                {
                    return RESULT.平手;
    
                }
                else
                {
                    return RESULT.电脑赢;
                }
    
            }
    
        }
    }

    3)、Player.cs 玩家,出拳

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace 石头剪刀布
    {
        class Player
        {
            public static int ShowFist(string fist)
            {
                switch (fist)
                {
                    case "石头": return 1;
                    case "剪刀": return 2;
                    case "": return 3;
                    default: return 0;
                }
            }
    
        }
    }

    界面后台实现代码:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace 石头剪刀布
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            /// <summary>
            /// 点击石头按钮
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnStone_Click(object sender, EventArgs e)
            {
                String fist = "石头";
                Game(fist);
            }
            /// <summary>
            /// 点击剪刀按钮
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnScissors_Click(object sender, EventArgs e)
            {
                String fist = "剪刀";
                Game(fist);
            }
            /// <summary>
            /// 点击布按钮
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnCloth_Click(object sender, EventArgs e)
            {
                String fist = "";
                Game(fist);
    
            }
    
            //背景图片轮播
            String[] paths = Directory.GetFiles(@"C:workstone");//此目录里面必须有图片,否则会报错
            private void timer1_Tick(object sender, EventArgs e)
            {
                this.BackgroundImage = Image.FromFile(paths[new Random().Next(0, paths.Length)]);
    
            }
            static int playerWinTimes = 0;//玩家赢的次数
            static int gameTimes = 0;//总共次数
            static int tieTimes = 0;//平手次数
    
            /// <summary>
            /// 通用方法
            /// </summary>
            /// <param name="fist"></param>
            private void Game(String fist)
            {
                gameTimes++;
                lbPlayer.Text = fist;
                int playerNum = Player.ShowFist(fist);
                Computer cpu = new Computer();
                int cpuNum = cpu.ShowFist();
                lbComputer.Text = cpu.Fist;
                Judge.RESULT result = Judge.WhoWin(playerNum, cpuNum);
                lbJudge.Text = result.ToString();
                lbStatistics.Text = "统计信息:
    
    1.您赢了" + playerWinTimes + "场比赛!
    
    " + "2.平手了" + tieTimes + "次; 
    
    " + "3.输掉了" + (gameTimes - playerWinTimes - tieTimes) + "场比赛; 
    
    " + "4.共进行了" + gameTimes + "场比赛!
    
    ";
    
                if (result == Judge.RESULT.玩家赢)
                {
                    playerWinTimes++;
                    MessageBox.Show("恭喜,您已经赢了" + playerWinTimes + "场比赛!" + " 共进行了" + gameTimes + "场比赛!");
                }
                else if (result == Judge.RESULT.平手)
                {
                    tieTimes++;
                }
    
            }
    
        }
    }

    实现游戏的难点在于要想到将石头剪刀布用数字来替换,如果逻辑通了实现起来并不难。

    本文源码:https://github.com/amosli/CSharp/tree/stone

  • 相关阅读:
    javascript学习笔记(一):基础、输出、注释、引用、变量、数据类型
    black-hole《XSS的原理分析与解剖》阅读笔记
    《xss跨站脚本剖析与防御》实验笔记
    XSS和CSRF的区别
    前端常用插件、工具类库汇总(下)
    前端常用插件、工具类库汇总(上)
    前端特效【第03期】|果汁混合效果-上
    玩转 React 【第03期】:邂逅 React 组件
    前端修炼の道 | 如何成为一名合格前端开发工程师?
    前端特效【第02期】|多功能提交按钮
  • 原文地址:https://www.cnblogs.com/amosli/p/3928462.html
Copyright © 2011-2022 走看看