C#(CSharp)入门实践项目(简易回合制游戏)

项目名称

木木夕营救公主

项目介绍

这是一个小游戏,你将扮演一个英雄(木木夕),去打败恶龙,拯救出公主,该项目采用回合制战斗模式,由于角色的血量和攻击为随机数,所以需要靠运气才能通关噢!

C#(CSharp)入门实践项目(简易回合制游戏)_第1张图片

简单需求分析

开始界面:控制台输入输出,控制台颜色变化

游戏界面:控制台输入输出,控制台颜色变化,回合制战斗(随机数,循环,条件判断)

结束界面: 控制台输入输出,控制台颜色变化

界面间相互切换 

项目代码(含详细说明)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharp入门_实践
{
    class Program
    {
        static void Main(string[] args)
        {
            #region 控制台基础设置
            int width = 50;
            int height = 30;
            //隐藏光标
            Console.CursorVisible = false;
            //设置控制台大小
            Console.SetWindowSize(width, height);
            //设置缓冲区大小
            Console.SetBufferSize(width, height);

            #endregion

            #region 多场景
            //约定 1是开始游戏界面,2是游戏界面,3是结束界面

            int nowId = 1;
            string gameOverInfo ="" ;
            while (true)
            {
                //不同的场景id,进行不同的逻辑
                switch (nowId)
                {
                    #region 开始场景逻辑
                    //开始场景
                    case 1:
                        Console.Clear();//每次场景切换需要把上一次的场景清除
                        Console.SetCursorPosition(width / 2 - 7, 8);//设置下面文字的位置
                        Console.Write("木木夕营救公主");
                        int nowSelIndex = 0;//当前选项编号 0:开始游戏  1:结束游戏
                        //输入
                        while (true)
                        {
                            bool isQuit = false;//退出循环标志
                            Console.SetCursorPosition(width / 2 - 4, 12);
                            //改变开始游戏的颜色
                            Console.ForegroundColor = nowSelIndex == 0 ? ConsoleColor.Red : ConsoleColor.White;

                            Console.Write("开始游戏");
                            Console.SetCursorPosition(width / 2 - 4, 14);
                            //改变结束游戏的颜色
                            Console.ForegroundColor = nowSelIndex == 1 ? ConsoleColor.Red : ConsoleColor.White;
                            Console.Write("退出游戏");
                            //说明
                            Console.SetCursorPosition(width / 2 - 16, 16);
                            Console.ForegroundColor = ConsoleColor.White;
                            Console.Write("说明:按W,S进行上下选择,J键确定");
                            Console.SetCursorPosition(width / 2 - 10, 18);
                            Console.Write("操作时按WASD进行移动");
                            Console.ForegroundColor = ConsoleColor.Green;
                            Console.SetCursorPosition(width / 2 - 10, 20);
                            Console.Write("★");
                            Console.ForegroundColor = ConsoleColor.White;
                            Console.Write("为boss");
                            Console.ForegroundColor = ConsoleColor.Yellow;
                            Console.SetCursorPosition(width / 2 - 10, 21);
                            Console.Write("●");
                            Console.ForegroundColor = ConsoleColor.White;
                            Console.Write("为玩家木木夕");
                            Console.ForegroundColor = ConsoleColor.Blue;
                            Console.SetCursorPosition(width / 2 - 10, 22);
                            Console.Write("▲");
                            Console.ForegroundColor = ConsoleColor.White;
                            Console.Write("为公主");
                            Console.SetCursorPosition(width / 2 - 18, 23);
                            Console.Write("找到boss,进行挑战,按J键进行一次攻击");

                            //检测玩家输入,根据输入内容进行跳转
                            char input = Console.ReadKey(true).KeyChar;//检测输入并赋值,不显示在控制台
                            switch (input)
                            {
                                case 'w':
                                case 'W':
                                    --nowSelIndex;
                                    if (nowSelIndex < 0)
                                    {
                                        nowSelIndex = 0;
                                    }
                                    break;
                                case 's':
                                case 'S':
                                    ++nowSelIndex;
                                    if (nowSelIndex > 1)
                                    {
                                        nowSelIndex = 1;
                                    }
                                    break;
                                case 'j':
                                case 'J':
                                    //确定按钮
                                    if (nowSelIndex == 0)
                                    {
                                        //进入游戏
                                        //改变当前场景id
                                        nowId = 2;
                                        //退出内层while循环
                                        isQuit = true;
                                    }
                                    else
                                    {
                                        //关闭控制台
                                        Environment.Exit(0);
                                    }
                                    break;


                            }
                            if (isQuit == true)
                            {
                                break;//跳出该层循环
                            }
                        }
                        break;
                    #endregion

                    //游戏场景
                    case 2:
                        Console.Clear();
                        #region 红墙
                        Console.ForegroundColor = ConsoleColor.Red;//设置颜色
                        //画墙
                        
                        for (int i = 0; i < width-2; i += 2)
                        {
                            //上方
                            Console.SetCursorPosition(i, 0);//设置位置
                            Console.Write("■");
                            //下方
                            Console.SetCursorPosition(i, height - 2);//设置位置
                            Console.Write("■");
                            //中间
                            Console.SetCursorPosition(i, height - 7);//设置位置
                            Console.Write("■");

                        }
                                       
                        for (int i = 0; i  0)
                            {
                                //绘制boss
                                Console.SetCursorPosition(xBoss, yBoss);
                                Console.ForegroundColor = bossColor;
                                Console.Write(bossIcon);

                            }

                            #region 公主模块
                            else
                            {
                                Console.SetCursorPosition(xprincess, yprincess);
                                Console.ForegroundColor = princessColor;
                                Console.Write(princessIcon);
                            }
                            #endregion
                            #region 玩家移动

                            //绘制玩家
                            Console.SetCursorPosition(xPlayer, yPlayer);
                            Console.ForegroundColor = playerColor;
                            Console.Write(playerIcon);

                            //玩家移动
                            //得到玩家输入
                            playerInput = Console.ReadKey(true).KeyChar;
                            //判断是否为战斗状态
                            if (isFight)
                            {
                                
                                //执行战斗状态逻辑
                                if (playerInput == 'j'|| playerInput == 'J'){
                                    //判断boss和玩家是否死亡
                                    if (playerHP <= 0)
                                    {
                                        //游戏结束
                                        nowId = 3;//结束游戏
                                        gameOverInfo = "游戏失败";
                                        break;

                                    }else if (bossHP <= 0)
                                    {
                                        //营救公主
                                        //先把boss擦除
                                        Console.SetCursorPosition(xBoss, yBoss);
                                        Console.Write("  ");
                                        isFight = false;

                                    }
                                    else
                                    {
                                        //玩家攻击boss
                                        Random rd = new Random();
                                        int atk = rd.Next(playerAtkMin, playerAtkMax);
                                        bossHP -= atk;
                                        //打印信息
                                        Console.ForegroundColor = ConsoleColor.Green;
                                        //擦除信息
                                        Console.SetCursorPosition(2, height - 4);
                                        Console.Write("                                               ");
                                        //再写新的信息
                                        Console.SetCursorPosition(2, height - 4);
                                        Console.Write("你对boss造成了{0}伤害,boss剩余血量为{1}", atk, bossHP);
                                        //boss攻击玩家
                                        if (bossHP > 0)
                                        {
                                            atk = rd.Next(bossAtkMin, bossAtkMax);
                                            playerHP -= atk;
                                            //打印信息
                                            Console.ForegroundColor = ConsoleColor.Yellow;
                                            //擦除信息
                                            Console.SetCursorPosition(2, height - 3);
                                            Console.Write("                                               ");

                                            //再写新的信息
                                            //玩家死亡
                                            if (playerHP < 0)
                                            {
                                                Console.SetCursorPosition(2, height - 3);
                                                Console.Write("很遗憾,你未能通过boss的试炼,战败了(按J结束)");

                                            }
                                            else
                                            {
                                                Console.SetCursorPosition(2, height - 3);
                                                Console.Write("boss对你造成了{0}伤害,你的剩余血量为{1}", atk, playerHP);
                                            }

                                        }
                                        else
                                        {
                                            //擦除战斗信息
                                            Console.SetCursorPosition(2, height - 5);
                                            Console.Write("                                               ");
                                            Console.SetCursorPosition(2, height - 4);
                                            Console.Write("                                               ");
                                            Console.SetCursorPosition(2, height - 3);
                                            Console.Write("                                               ");
                                            //显示胜利信息
                                            Console.SetCursorPosition(2, height - 5);
                                            Console.Write("你战胜了boss,快去营救公主(先按J键解除战斗)");
                                            Console.SetCursorPosition(2, height - 4);
                                            Console.Write("请前往公主身边,按J键进行营救");

                                        }
                                    }

                                    
                                }

                            }
                            else
                            {
                                //执行非战斗状态逻辑

                                //擦除
                                Console.SetCursorPosition(xPlayer, yPlayer);//设置光标位置
                                Console.Write("  ");//擦除
                                                    //改位置
                                switch (playerInput)
                                {
                                    case 'w':
                                    case 'W':
                                        --yPlayer;
                                        if (yPlayer < 1)
                                        {
                                            yPlayer = 1;
                                        }//主角与boss重合,但是boss没有死
                                        else if (xPlayer == xBoss && yPlayer == yBoss && bossHP > 0)
                                        {
                                            //拉回去
                                            ++yPlayer;

                                        }else if (xPlayer == xprincess && yPlayer == yprincess && bossHP <= 0)
                                        {
                                            //拉回去
                                            ++yPlayer;
                                        }

                                        break;
                                    case 'a':
                                    case 'A':
                                        xPlayer -= 2;
                                        if (xPlayer < 2)
                                        {
                                            xPlayer = 2;
                                        }//主角与boss重合,但是boss没有死
                                        else if (xPlayer == xBoss && yPlayer == yBoss && bossHP > 0)
                                        {
                                            //拉回去
                                            xPlayer += 2;

                                        }
                                        else if (xPlayer == xprincess && yPlayer == yprincess && bossHP <= 0)
                                        {
                                            //拉回去
                                            xPlayer += 2;
                                        }
                                        break;
                                    case 's':
                                    case 'S':
                                        ++yPlayer;
                                        if (yPlayer > height - 8)
                                        {
                                            yPlayer = height - 8;
                                        }//主角与boss重合,但是boss没有死
                                        else if (xPlayer == xBoss && yPlayer == yBoss && bossHP > 0)
                                        {
                                            //拉回去
                                            --yPlayer;

                                        }
                                        else if (xPlayer == xprincess && yPlayer == yprincess && bossHP <= 0)
                                        {
                                            //拉回去
                                            --yPlayer;
                                        }
                                        break;
                                    case 'd':
                                    case 'D':
                                        xPlayer += 2;
                                        if (xPlayer > width - 4)
                                        {
                                            xPlayer = width - 4;
                                        }//主角与boss重合,但是boss没有死
                                        else if (xPlayer == xBoss && yPlayer == yBoss && bossHP > 0)
                                        {
                                            //拉回去
                                            xPlayer -= 2;

                                        }
                                        else if (xPlayer == xprincess && yPlayer == yprincess && bossHP <= 0)
                                        {
                                            //拉回去
                                            xPlayer -= 2;
                                        }

                                        break;
                                    case 'j':
                                    case 'J':

                                        //开始战斗,玩家不再移动,下方显示信息
                                        if ((xPlayer == xBoss && yPlayer == yBoss - 1 ||
                                           xPlayer == xBoss && yPlayer == yBoss + 1 ||
                                           yPlayer == yBoss && xPlayer == xBoss - 2 ||
                                            yPlayer == yBoss && xPlayer == xBoss + 2) && bossHP > 0
                                            )
                                        {
                                            isFight = true;
                                            //满足上述条件可以开始战斗
                                            Console.SetCursorPosition(2, height - 5);
                                            Console.ForegroundColor = ConsoleColor.White;
                                            Console.Write("开始和boss战斗了,按J键继续");
                                            Console.SetCursorPosition(2, height - 4);
                                            Console.Write("玩家当前血量为{0}", playerHP);
                                            Console.SetCursorPosition(2, height - 3);
                                            Console.Write("Boss当前血量为{0}", bossHP);
                                        }
                                        //判断是否在公主身边
                                        else if ((xPlayer == xprincess && yPlayer == yprincess - 1 ||
                                           xPlayer == xprincess && yPlayer == yprincess + 1 ||
                                           yPlayer == yprincess && xPlayer == xprincess - 2 ||
                                            yPlayer == yprincess && xPlayer == xprincess + 2) && bossHP<=0)
                                        {
                                            nowId = 3;
                                            gameOverInfo ="游戏通关";
                                            isOver = true;
                                            break;


                                        }

                                        break;
                                }

                            }
                            #endregion

                            if (isOver)
                            {
                                break;
                            }


                        }
                        break;
                    //结束场景
                    case 3:
                        Console.Clear();
                        Console.SetCursorPosition(width / 2 - 5, 5);
                        Console.ForegroundColor = ConsoleColor.White;
                        Console.Write("GAME  OVER");
                        //失败和成功提示不一样
                        Console.SetCursorPosition(width / 2 - 4, 7);
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.Write(gameOverInfo);
                        int nowSelEndId = 0;
                        while (true)
                        {
                            bool isQuitEnd = false;
                            Console.SetCursorPosition(width / 2 - 6, 9);
                            Console.ForegroundColor = nowSelEndId == 0 ? ConsoleColor.Red : ConsoleColor.White;
                            Console.Write("回到开始界面");
                            Console.SetCursorPosition(width / 2 - 4, 11);
                            Console.ForegroundColor = nowSelEndId == 1 ? ConsoleColor.Red : ConsoleColor.White;
                            Console.Write("退出游戏");
                            char input = Console.ReadKey(true).KeyChar;

                            switch (input)
                            {
                                case 'w':
                                case 'W':
                                    --nowSelEndId;
                                    if (nowSelEndId < 0)
                                    {
                                        nowSelEndId = 0;
                                    }
                                    break;
                                case 's':
                                case 'S':
                                    ++nowSelEndId;
                                    if (nowSelEndId >1)
                                    {
                                        nowSelEndId = 1;
                                    }
                                    break;
                                case 'j':
                                case 'J':
                                    if (nowSelEndId == 0)
                                    {
                                        nowId = 1;
                                        isQuitEnd = true;
                                    }
                                    else
                                    {
                                        Environment.Exit(0);
                                    }
                                    break;

                            }
                            //为了从switch中跳出while
                            if (isQuitEnd)
                            {
                                break;
                            }

                        }
                        break;


                }
            }

            #endregion
        }
    }
}

项目演示 

木木夕营救公主

你可能感兴趣的:(C#(CSharp),c#,数据库,服务器)