结构体案例之对战游戏

class Program
    {
        struct Player
        {
            public string name;
            public int blood;
            public int attack;
            public int defence;
            public int shanbi;
            public ArrayList jineng ;
            public ArrayList shanghai;
        }

        static void Main(string[] args)
        {

            #region 定义技能库
            string [] jn = new string[10]{
                "横扫千军",
                "叽叽歪歪",
                "龙腾",
                "降龙十八掌",
                "大鹏展翅",
                "一阳指",
                "六脉神剑",
                "死亡一指",
                "恩赐解脱",
                "破釜沉舟",
            };
            int [] sh = new int[10]{
                500,
                300,
                350,
                500,
                360,
                400,
                480,
                490,
                500,
                450
            };

            #endregion

            Console.WriteLine("请输入第一个玩家的姓名:");
            string name1 = Console.ReadLine();

            Console.WriteLine("请输入第二个玩家的姓名:");
            string name2 = Console.ReadLine();

            #region 造玩家,赋初始值

            Player p1 = new Player();
            int seed1=0;
            if (name1.Length == 2)
            {
                seed1 = (int)Convert.ToChar(name1.Substring(0, 1)) + (int)Convert.ToChar(name1.Substring(1, 1));
            }
            else
            {
                seed1 = (int)Convert.ToChar(name1.Substring(0, 1)) + (int)Convert.ToChar(name1.Substring(1, 1)) + (int)Convert.ToChar(name1.Substring(2, 1));
            }
            Random r1 = new Random(seed1);
            p1.name = name1;
            p1.blood = 3000+r1.Next(1500);
            p1.attack = 200 + r1.Next(100);
            p1.defence = 80 + r1.Next(50);
            p1.shanbi = 2+r1.Next(2);
            p1.jineng = new ArrayList();
            p1.shanghai = new ArrayList();
            Random rj = new Random();
            for(int i=0;i<3;i++)
            {
                int jnh = rj.Next(10);
                string jnm = jn[jnh];
                if (!p1.jineng.Contains(jnm))
                {
                    p1.jineng.Add(jnm);
                    p1.shanghai.Add(sh[jnh]);
                }
                else
                {
                    i--;
                }
            }

            Player p2 = new Player();
            int seed2 = 0;
            if (name2.Length == 2)
            {
                seed2 = (int)Convert.ToChar(name2.Substring(0, 1)) + (int)Convert.ToChar(name2.Substring(1, 1));
            }
            else
            {
                seed2 = (int)Convert.ToChar(name2.Substring(0, 1)) + (int)Convert.ToChar(name2.Substring(1, 1)) + (int)Convert.ToChar(name2.Substring(2, 1));
            }
            Random r2 = new Random(seed2);
            p2.name = name2;
            p2.blood = 3000 + r2.Next(1500);
            p2.attack = 200 + r2.Next(100);
            p2.defence = 80 + r2.Next(50);
            p2.shanbi = 2 + r2.Next(2);
            p2.jineng = new ArrayList();
            p2.shanghai = new ArrayList();

            for (int i = 0; i < 3; i++)
            {
                int jnh = rj.Next(10);
                string jnm = jn[jnh];
                if (!p2.jineng.Contains(jnm))
                {
                    p2.jineng.Add(jnm);
                    p2.shanghai.Add(sh[jnh]);
                }
                else
                {
                    i--;
                }
            }

            #endregion

            #region 显示玩家基础信息
            Console.WriteLine("玩家1:姓名:{0},血量{1},攻击力{2},防御{3},闪避{4},所会技能1:{5},所会技能2:{6},所会技能3:{7}",p1.name,p1.blood,p1.attack,p1.defence,p1.shanbi,p1.jineng[0],p1.jineng[1],p1.jineng[2]);
            Console.WriteLine("玩家2:姓名:{0},血量{1},攻击力{2},防御{3},闪避{4},所会技能1:{5},所会技能2:{6},所会技能3:{7}", p2.name, p2.blood, p2.attack, p2.defence, p2.shanbi, p2.jineng[0], p2.jineng[1], p2.jineng[2]);
            #endregion

            Console.WriteLine("--------------------------------------------");

            Console.WriteLine("请按空格键开始对战");
            ConsoleKeyInfo key = Console.ReadKey();
            Console.Clear();
            if (key.Key.ToString().ToLower() == "spacebar")
            {
                #region 对战

                while (true)
                {
                    //判断退出条件
                    if (p1.blood == 0 && p2.blood == 0)
                    {
                        Console.ForegroundColor = ConsoleColor.Yellow;
                        Console.WriteLine("同归于尽了!");
                        break;
                    }
                    else if (p1.blood == 0)
                    {
                        Console.ForegroundColor = ConsoleColor.Gray;
                        Console.WriteLine(p2.name + "将" + p1.name + "KO了。。。");
                        break;
                    }
                    else if (p2.blood == 0)
                    {
                        Console.ForegroundColor = ConsoleColor.Gray;
                        Console.WriteLine(p1.name + "将" + p2.name + "KO了。。。");
                        break;
                    }

                    //开始打
                    #region p1打p2
                    //p1对p2进行殴打
                    Random rdz = new Random();
                    int dz1 = rdz.Next(10);
                    if (dz1 > 7) //使用大招
                    {
                        int dzs = rdz.Next(3);
                        Console.ForegroundColor = ConsoleColor.White;
                        Console.WriteLine(p1.name + "使用了" + p1.jineng[dzs] + ",对" + p2.name + "造成了" + p1.shanghai[dzs] + "伤害!");
                        p2.blood = p2.blood - Convert.ToInt32(p1.shanghai[dzs]);
                        if (p2.blood <= 0)
                        {
                            p2.blood = 0;
                        }
                    }
                    else //普通攻击
                    {
                        int ptgjsb = rdz.Next(10);
                        if (ptgjsb < p2.shanbi) //p2闪避
                        {
                            Console.ForegroundColor = ConsoleColor.Green;
                            Console.WriteLine(p2.name + "躲避了" + p1.name + "的这次攻击!");
                        }
                        else //未闪避
                        {
                            int p2sh = (p1.attack + rdz.Next(50)) - (p2.defence + rdz.Next(20));
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine(p1.name + "对" + p2.name + "进行了普通攻击,造成了" + p2sh + "伤害!");
                            p2.blood = p2.blood - p2sh;
                            if (p2.blood <= 0)
                            {
                                p2.blood = 0;
                            }
                        }

                    }
                    #endregion
                    #region P2打P1
                    //p1对p2进行殴打
                    int dz2 = rdz.Next(10);
                    if (dz2 > 7) //使用大招
                    {
                        int dzs = rdz.Next(3);
                        Console.ForegroundColor = ConsoleColor.White;
                        Console.WriteLine(p2.name + "使用了" + p2.jineng[dzs] + ",对" + p1.name + "造成了" + p2.shanghai[dzs] + "伤害!");
                        p1.blood = p1.blood - Convert.ToInt32(p2.shanghai[dzs]);
                        if (p1.blood <= 0)
                        {
                            p1.blood = 0;
                        }
                    }
                    else //普通攻击
                    {
                        int ptgjsb = rdz.Next(10);
                        if (ptgjsb < p1.shanbi) //p2闪避
                        {
                            Console.ForegroundColor = ConsoleColor.Green;
                            Console.WriteLine(p1.name + "躲避了" + p2.name + "的这次攻击!");
                        }
                        else //未闪避
                        {
                            int p1sh = (p2.attack + rdz.Next(50)) - (p1.defence + rdz.Next(20));
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine(p2.name + "对" + p1.name + "进行了普通攻击,造成了" + p1sh + "伤害!");
                            p1.blood = p1.blood - p1sh;
                            if (p1.blood <= 0)
                            {
                                p1.blood = 0;
                            }
                        }

                    }
                    #endregion

                    Console.ForegroundColor = ConsoleColor.DarkYellow;
                    Console.WriteLine(p1.name + "的剩余血量为:" + p1.blood + ",  " + p2.name + "的剩余血量为:" + p2.blood);

                    Console.ForegroundColor = ConsoleColor.White;
                    Console.WriteLine("-----------------------------------------");
                    Console.WriteLine();
                    Thread.Sleep(2000);

                }

                #endregion

            }
        }
    }
时间: 2024-10-12 19:26:27

结构体案例之对战游戏的相关文章

结构体案例之学生成绩输入及排序

class Program { struct Student { public string name; public int age; public double Cshap; public double Database; public double Html; public double sum; } static void Main(string[] args) { Console.WriteLine("请输入学生的个数:"); int a = Convert.ToInt32(

结构体、枚举类型及其练习题,最后的对战游戏(基础版)

结构体:在内存中临时存储数据的方式1.变量.常量2.数组,可以存储固定长度统一类型的数据3.集合4.结构体 学生信息:姓名,性别,年龄,系别 结构体含义:就是将生活中的一些个体,封装成一个特殊的类型 结构体是:用户自定义数据类型 创建:创建的位置:main函数之外struct Student{ public int Code; public string Name; public string Sex; public int Old; public DateTime Birthday;} 定义:

1月5日 结构体(对战小游戏)

namespace duzhanxiaoyouxi{ struct RenWu                              //定义 struct  类型 { public string Name; public int Blood;                   //这个就是结构体:结构体相当于我们自己定义的一种复杂的类型,用来解决生活中的复杂问题. public int Attack; public int Defence; public int Speed; publi

《天天酷跑》游戏后台结构体标准化探 转

http://www.yxrb.net/thread-11839-1-1.html 在程序设计领域,程序就是数据结构加算法的理论早已深入人心.在手机游戏的后台系统中,数据结构就是各式各样的struct或class,遍布于数据存储(DB).内存(业务逻辑).网络(C/S交互协议),算法就是各种基于数据的业务处理逻辑了. 手机游戏后台数据结构有一些特点: 以整形数据为主,字符串类型比例很少,绝大部分数据可以用整形(直接或间接)表示. 相对大型端游,数据结构相对简单,绝大多数可以通过2-3层结构来抽象

代码案例(结构体,函数指针,指针函数,冒泡排序) 修改

#import <Foundation/Foundation.h> typedef struct {     char name[20];     int age;     float score; }Stu; //建立字符串和函数之间的一一对应关系. typedef BOOL (*PStu) (Stu stu1,Stu stu2) ; typedef struct nameFunctionPair{     char name[20]; //存储函数对应的字符串     PStu funct

代码案例(结构体,函数指针,指针函数,冒泡排序)

typedef struct {     char name[20];     int age;     float score; }Stu; #import <Foundation/Foundation.h> //姓名升序 void sortByName(Stu *p , int count ) {     for (int i = 0 ; i < count -1; i ++) {         for (int j= 0 ; j < count -1-i; j ++) {

C语言——结构体数组的使用案例(如何判断两个矩形是否相交,其中一个是否包含在另外一个里面,点是否在矩形中)

Rect.h struct CPoint { float x; float y; }; typedef struct CPoint CPoint; struct CSize { float width; float height; }; typedef struct CSize CSize; struct CRect { CPoint origin; CSize size; }; typedef struct CRect CRect; //判断两个矩形是否相交 BOOL isIntersecti

C零基础视频-41-使用结构体封装游戏角色

目录 关于游戏封装的思考 封装后代码 关于游戏封装的思考 原代码: #include <windows.h> #include <conio.h> #include <stdio.h> void MoveCursorTo(int nRow, int nCol) { COORD crdLocation; crdLocation.X = 2 * nCol; crdLocation.Y = nRow; SetConsoleCursorPosition(GetStdHandle

第十二天学习内容 综合应用 推箱子和对战游戏

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace day12{    class Program    {        static void Main(string[] args)        { //推箱子游戏            int x = 1, y = 1, i = 0;