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

news2024/11/17 21:48:59

项目名称

木木夕营救公主

项目介绍

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

简单需求分析

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

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

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

界面间相互切换 

项目代码(含详细说明)

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 <height-1; i++)
                        {
                            //左边
                            Console.SetCursorPosition(0, i);//设置位置
                            Console.Write("■");
                            //右边
                            Console.SetCursorPosition(width-2, i);//设置位置
                            Console.Write("■");

                        }
                        #endregion

                        #region boss属性相关
                        //boss位置
                        int xBoss = 24;
                        int yBoss = 15;
                        //boss攻击范围
                        int bossAtkMin = 9;
                        int bossAtkMax = 16;
                        //boss血量
                        int bossHP = 100;
                        //boss图标
                        string bossIcon = "★";
                        //boss颜色
                        ConsoleColor bossColor = ConsoleColor.Green;

                        #endregion

                        #region 玩家属性相关
                        //Player位置
                        int xPlayer = 4;
                        int yPlayer = 5;
                        //Player攻击范围
                        int playerAtkMin = 8;
                        int playerAtkMax = 15;
                        //Player血量
                        int playerHP = 100;
                        //Player图标
                        string playerIcon = "●";
                        //Player颜色
                        ConsoleColor playerColor = ConsoleColor.Yellow;
                        //玩家输入的内容
                        char playerInput;
                        #endregion

                        #region 公主属性
                        int xprincess = 24;
                        int yprincess = 5;
                        string princessIcon = "▲";
                        ConsoleColor princessColor = ConsoleColor.Blue;
                        #endregion
                        #region 玩家战斗状态
                        bool isFight = false;
                        bool isOver = false;//跳出while
                        #endregion
                        //游戏场景死循环
                        while (true)
                        {
                            //boss活着
                            if (bossHP > 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
        }
    }
}

项目演示 

木木夕营救公主

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1047237.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv7改进:CBAM注意力机制

目录 1.介绍 1.1、论文的出发点 1.2、论文的主要工作 1.3、CBAM模块的具体介绍 2.YOLOv7改进 2.1yaml 配置文件如下 2.2common.py配置 2.3yolo.py配置 1.介绍 1.1、论文的出发点 cnn基于其丰富的表征能力&#xff0c;极大地推动了视觉任务的完成&#xff0c;为了提高…

【MySql】3- 实践篇(一)

文章目录 1. 普通索引和唯一索引的选择1.1 查询过程1.2 更新过程1.2.1 change buffer1.2.2 change buffer 的使用场景 1.3 索引选择和实践1.4 change buffer 和 redo log2. MySQL为何有时会选错索引?2.1 优化器的逻辑2.1.1 扫描行数是怎么判断的?2.1.2 重新统计索引信息 2.2 …

一站式吃鸡利器,提升游戏战斗力,助您稳坐鸡王宝座!

各位吃鸡玩家们&#xff0c;听说过绝地求生作图工具吗&#xff1f;想知道如何提高游戏战斗力、分享顶级作战干货、查询装备皮肤库存&#xff1f;还在为游戏账号安全而担心吗&#xff1f;别急&#xff0c;今天就为您介绍一款一站式吃鸡利器&#xff0c;满足您的所有需求&#xf…

【使用工具】IDEA创建类及已有类添加注释-详细操作

1.背景 很多开发好多时候其实不太会给类添加注释&#xff0c;尤其是已经有的类&#xff0c;上网查询&#xff0c;好多文档错误百出&#xff0c;而且不全 2.正文 2.1新建类添加注释 idea给新建类创建注释有两种方式 先写一个简单的模板 /** * description: TODO * autho…

kotlin协程CoroutineScope Dispatchers.IO launch 线程Id

kotlin协程CoroutineScope Dispatchers.IO launch 线程Id import kotlinx.coroutines.*fun main(args: Array<String>) {println("main 线程id:${Thread.currentThread().threadId()}")CoroutineScope(Dispatchers.IO).launch {println("launch 线程id:$…

【JVM】第二篇 JVM内存模型深度剖析与优化

目录 一. JDK体系结构与跨平台特性介绍二. JVM内存模型深度剖析三. 从Jvisualvm来研究下对象内存流转模型四. GC Root与STW机制五. JVM参数设置通用模型一. JDK体系结构与跨平台特性介绍 二. JVM内存模型深度剖析 按照线程是否共享来划分 TLAB(Thread Local Allocation Buffer…

mybatis核心组件

title: “mybatis核心组件” createTime: 2021-12-08T12:19:5708:00 updateTime: 2021-12-08T12:19:5708:00 draft: false author: “ggball” tags: [“mybatis”] categories: [“java”] description: “mybatis核心组件” #mermaid-svg-AYu4pQutsPsK0P5T {font-family:&quo…

stm32 - 初识2

stm32 - 初识2 工程架构点灯程序寄存器方式点灯库函数的方式点灯 工程架构 启动文件 中断向量表&#xff0c;中断服务函数&#xff0c;其他中断等 中断服务函数中的&#xff0c;复位中断是整个程序的入口&#xff0c;调用systeminit&#xff0c;和main函数 点灯程序 寄存器方式…

自适应阈值分割-OTSU

OTSU 在前面固定阈值中选取了一个阈值为127进行阈值分割&#xff0c;那如何知道选的这个阈值效果好不好呢&#xff1f;答案是&#xff1a;不断尝试&#xff0c;所以这种方法在很多文献中都被称为经验阈值。 Otsu阈值法就提供了一种自动高效的二值化方法。Otsu算法也称最大类间…

C++之std::atomic类模板原子操作应用总结(二百三十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

JAVA+SpringBoot+VUE工厂车间管理系统(含论文)源码

springboot169基于vue的工厂车间管理系统的设计录像(毕业设计jdz2023) 一、源码描述 JAVASpringBootVUE工厂车间管理系统,包含源码数据库论文等,含MySQL脚本&#xff0c;基于B/S和Web开发的&#xff0c;感兴趣的朋友可以下载看看 二、功能介绍 1、个人中心 2、人员管理 3、设备…

计算机图像处理:图像轮廓

图像轮廓 图像阈值分割主要是针对图片的背景和前景进行分离&#xff0c;而图像轮廓也是图像中非常重要的一个特征信息&#xff0c;通过对图像轮廓的操作&#xff0c;就能获取目标图像的大小、位置、方向等信息。画出图像轮廓的基本思路是&#xff1a;先用阈值分割划分为两类图…

Textpad 缺少Java编译和运行功能

一、问题 缺少Java编译和运行功能 二、处理方法 1、点击菜单Configure->Preferences 2、点击 Tools -> Add -> Java SDK Commands 3、点击应用和确认 三、结果

现代 GPU 容易受到新 GPU.zip 侧通道攻击

来自四所美国大学的研究人员开发了一种新的 GPU 侧通道攻击&#xff0c;该攻击利用数据压缩在访问网页时泄露现代显卡中的敏感视觉数据。 研究人员通过 Chrome 浏览器执行跨源 SVG 过滤器像素窃取攻击&#xff0c;证明了这种“ GPU.zip ”攻击的有效性。 研究人员于 2023 年 …

【JVM】第五篇 垃圾收集器G1和ZGC详解

导航 一. G1垃圾收集算法详解1. 大对象Humongous说明2. G1收集器执行一次GC运行的过程步骤3. G1垃圾收集分类4. G1垃圾收集器参数设置5. G1垃圾收集器的优化建议6. 适合使用G1垃圾收集器的场景?二. ZGC垃圾收集器详解1. NUMA与UMA2. 颜色指针3. ZGC的运作过程4. ZGC垃圾收集器…

mysql面试题2:说一说MySQL的架构设计?一条 MySQL 语句执行的步骤?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说MySQL的架构设计? MySQL的架构设计主要包括以下几个组件: 连接器(Connector):负责与客户端建立连接,并进行身份验证和授权。 查询缓存…

文件的随机读写函数:fseek

目录 函数介绍&#xff1a; fseek&#xff1a; 原型&#xff1a; 参数说明&#xff1a; int origin&#xff1a; 举例&#xff1a; 文件内容展示&#xff1a; 正常的使用fgetc函数&#xff1a; 结果&#xff1a; 使用了fseek之后&#xff1a; SEEK_SET :从开始位置进行…

VBA技术资料MF60:从二维变体数组中删除一列数据

【分享成果&#xff0c;随喜正能量】如果一个人能看破红尘&#xff0c;特别是如果能看破贪欲的本质&#xff0c;他的身心一定会非常自在&#xff0c;外在的气色会很好&#xff0c;内心也会非常安乐。如果一个人总是贪执某人&#xff0c;那他的戒律肯定不会清净&#xff0c;他的…

渗透测试之打点

请遵守中华人民共和国网络安全法 打点的目的是获取一个服务器的控制权限 1. 企业架构收集 &#xff08;1&#xff09;官网 &#xff08;2&#xff09;网站或下属的子网站&#xff0c;依次往下 天眼查 企查查 2. ICP 备案查询 ICP/IP地址/域名信息备案管理系统 使用网站…

轮廓检测及透视变换

文章目录 注&#xff1a;代码来自b站&#xff1a;阿头目G # 导入工具包 import numpy as np import argparse import cv2# # 设置参数 # ap argparse.ArgumentParser() # ap.add_argument("-i", "--image", required True, # help "Path to the i…