2.复用修改贪食蛇相关代码
2.1 知识点
要移动的代码图示
主要操作
把贪吃蛇的游戏入口,游戏类,更新接口,开始结束游戏场景相关类移过来
移除贪吃蛇的命名空间,标题,控制台宽高,贪吃蛇相关的类和相关报错等
2.2 知识点代码
Program
using System;
namespace CSharp进阶实践教学
{
class Program
{
static void Main(string[] args)
{
Game g = new Game();
g.Start();
}
}
}
Game
using System;
using System.Collections.Generic;
using System.Text;
namespace CSharp实践教学
{
/// <summary>
/// 场景类型枚举
/// </summary>
enum E_SceneType
{
/// <summary>
/// 开始场景
/// </summary>
Begin,
/// <summary>
/// 游戏场景
/// </summary>
Game,
/// <summary>
/// 结束场景
/// </summary>
End,
}
class Game
{
//游戏窗口宽高
public const int w = 50;
public const int h = 35;
//当前选中的场景
public static ISceneUpdate nowScene;
public Game()
{
Console.CursorVisible = false;
Console.SetWindowSize(w, h);
Console.SetBufferSize(w, h);
ChangeScene(E_SceneType.Begin);
}
//游戏开始的方法
public void Start()
{
//游戏主循环 主要负责 游戏场景逻辑的更新
while (true)
{
//判断当前游戏场景不为空 就更新
if( nowScene != null )
{
nowScene.Update();
}
}
}
public static void ChangeScene(E_SceneType type)
{
//切场景之前 应该把上一个场景的绘制内容擦掉
Console.Clear();
switch (type)
{
case E_SceneType.Begin:
nowScene = new BeginScene();
break;
case E_SceneType.Game:
nowScene = new GameScene();
break;
case E_SceneType.End:
nowScene = new EndScene();
break;
}
}
}
}
ISceneUpdate
using System;
using System.Collections.Generic;
using System.Text;
namespace CSharp实践教学
{
/// <summary>
/// 场景更新接口
/// </summary>
interface ISceneUpdate
{
void Update();
}
}
BeginOrEndBaseScene
using System;
using System.Collections.Generic;
using System.Text;
namespace CSharp实践教学
{
abstract class BeginOrEndBaseScene : ISceneUpdate
{
protected int nowSelIndex = 0;
protected string strTitle;
protected string strOne;
public abstract void EnterJDoSomthing();
public void Update()
{
//开始和结束场景的 游戏逻辑
//选择当前的选项 然后 监听 键盘输入 wsj
Console.ForegroundColor = ConsoleColor.White;
//显示标题
Console.SetCursorPosition(Game.w / 2 - strTitle.Length, 5);
Console.Write(strTitle);
//显示下方的选项
Console.SetCursorPosition(Game.w / 2 - strOne.Length, 8);
Console.ForegroundColor = nowSelIndex == 0 ? ConsoleColor.Red : ConsoleColor.White;
Console.Write(strOne);
Console.SetCursorPosition(Game.w / 2 - 4, 10);
Console.ForegroundColor = nowSelIndex == 1 ? ConsoleColor.Red : ConsoleColor.White;
Console.Write("结束游戏");
//检测输入
switch(Console.ReadKey(true).Key)
{
case ConsoleKey.W:
--nowSelIndex;
if( nowSelIndex < 0 )
{
nowSelIndex = 0;
}
break;
case ConsoleKey.S:
++nowSelIndex;
if (nowSelIndex > 1)
{
nowSelIndex = 1;
}
break;
case ConsoleKey.J:
EnterJDoSomthing();
break;
}
}
}
}
BeginScene
using System;
using System.Collections.Generic;
using System.Text;
namespace CSharp实践教学
{
class BeginScene : BeginOrEndBaseScene
{
public BeginScene()
{
strTitle = "俄罗斯方块";
strOne = "开始游戏";
}
public override void EnterJDoSomthing()
{
//按J键做什么的逻辑
if (nowSelIndex == 0)
{
Game.ChangeScene(E_SceneType.Game);
}
else
{
Environment.Exit(0);
}
}
}
}
EndScene
using System;
using System.Collections.Generic;
using System.Text;
namespace CSharp实践教学
{
class EndScene : BeginOrEndBaseScene
{
public EndScene()
{
strTitle = "结束游戏";
strOne = "回到开始界面";
}
public override void EnterJDoSomthing()
{
//按J键做什么的逻辑
if (nowSelIndex == 0)
{
Game.ChangeScene(E_SceneType.Begin);
}
else
{
Environment.Exit(0);
}
}
}
}
GameScene
using System;
using System.Collections.Generic;
using System.Text;
namespace CSharp实践教学
{
class GameScene : ISceneUpdate
{
int updateIndex = 0;
public GameScene()
{
}
public void Update()
{
Console.ReadKey(true);
Game.ChangeScene(E_SceneType.End);
}
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com