C#遊戲程式設計:《控制檯小遊戲系列》之《六、貪吃蛇例項》
阿新 • • 發佈:2018-12-29
[csharp] view
plaincopyprint?
- using System;
- using CEngine;
- using CGraphics;
- namespace Snake
- {
- /// <summary>
- /// 貪吃蛇遊戲類
- /// </summary>
- publicsealedclass SnakeGame : CGame
- {
- /// <summary>
- /// 遊戲狀態
- /// </summary>
-
public
- {
- /// <summary>
- /// 初始化
- /// </summary>
- Init,
- /// <summary>
- /// 開始遊戲
- /// </summary>
- Start,
- /// <summary>
- /// 暫停遊戲
-
/// </summary>
- Pause,
- /// <summary>
- /// 結束遊戲
- /// </summary>
- End
- }
- /// <summary>
- /// 貪吃蛇
- /// </summary>
- private Snake g_snake;
- /// <summary>
- /// 食物
- /// </summary>
-
private
- /// <summary>
- /// 隨機數
- /// </summary>
- private Random g_random;
- /// <summary>
- /// 分數
- /// </summary>
- private Int32 g_score;
- /// <summary>
- /// 生命
- /// </summary>
- private Int32 g_lifes;
- /// <summary>
- /// 狀態
- /// </summary>
- private GameState g_state;
- #region 遊戲執行函式
- /// <summary>
- /// 遊戲初始化
- /// </summary>
- protectedoverridevoid gameInit()
- {
- base.setTitle("控制檯遊戲之——簡易貪吃蛇v1.0");
- base.setCursorVisible(false);
- base.setUpdateRate(50);
- this.g_random = new Random();
- this.g_snake = new Snake(3, CDirection.Right);
- this.g_food = new Food();
- this.g_lifes = 3;
- this.g_state = GameState.Init;
- this.drawInitUI();
- }
- /// <summary>
- /// 遊戲重繪時響應
- /// </summary>
- /// <param name="e"></param>
- protectedoverridevoid onRedraw(CPaintEventArgs e)
- {
- base.onRedraw(e);
- CDraw draw = e.getDraw();
- //繪製食物
- g_food.draw(draw);
- //繪製資料
- draw.drawText("得分:" + g_score.ToString(), 63, 2, ConsoleColor.Green);
- draw.drawText("生命:" + g_lifes.ToString(), 63, 4, ConsoleColor.Red);
- }
- /// <summary>
- /// 遊戲渲染
- /// </summary>
- /// <param name="draw"></param>
- protectedoverridevoid gameDraw(CGraphics.CDraw draw)
- {
- if (g_state == GameState.Start)
- {
- g_snake.draw(draw);
- draw.drawText("FPS:" + getFPS(), 63, 6, ConsoleColor.Blue);
- }
- }
- /// <summary>
- /// 遊戲邏輯
- /// </summary>
- protectedoverridevoid gameLoop()
- {
- //遊戲開始狀態
- if (g_state == GameState.Start)
- {
- //如果蛇能爬行或者沒有自殘則爬行
- if (g_snake.move() && !g_snake.isSeftCollision())
- {
- //吃到食物
- if