1. 程式人生 > >用C#實現貪吃蛇遊戲

用C#實現貪吃蛇遊戲

先說了,如果不會GDI+,類的定義這些基礎東西的,請先搜尋相關貼子學習。

這次教大家用C#做一個簡單的貪吃蛇遊戲。

先介紹用到的技術:

GDI+

定義類

列舉

因為C#是一門面向物件的語言,我們不用把所有程式碼都寫在一個窗體上,應該有一個分層思想(介面還介面,資料處理還資料處理),如果還要網上對戰的話,搞個三層吧(介面層,資料處理或邏輯層,Socket層),這樣不僅方便維護,還為後面新增新Idea會容易一點。

廢話少講,現在開始

在編寫遊戲程式碼之前,先想一想,貪食蛇裡有什麼呢?

蛇,這是必要的。

食物,這也是必要的。

蛇應該是怎樣的一條蛇?

不斷向一個方向移動,那就是有方向了。方向可以用整數代表,不過為了方便以後編寫程式碼,

還是定義一個列舉好一點。還要會移動。還要有一個位置。還要有一個速度

蛇有一個長度,也要記錄下它各個身體的位置,因為蛇吃食物會不斷加長,所以他的身體數量(即長度)是會變化的,所以最好是定義一個泛型List<Point>來記錄身體上的所有位置。

蛇怎樣才能移動,原理是這樣,後面一個蛇身替代頭部的位置,然後頭部向前走一步。

食物呢?我們不搞傳統的貪吃蛇,食物可以是多個的,也應該有不同型別,吃到不同型別的食物,蛇會作出相應的變化。也就是說,食物也有型別,所以定義一個enum為食物型別

為了搞搞新意思,加上一個蛇的速度,蛇吃到快的食物,會加快速度,吃到慢的食物,會減慢速度。所以定義了速度

列舉一般寫在一個Common.cs

總的來說,定義類應該是這樣:

蛇:方向(列舉),狀態(列舉),移動(方法),位置(頭部位置),長度,各身體的位置,速度

食物:位置,型別

不說太多,我將會在程式碼裡寫詳盡的註釋。大家應該看得明白。

程式碼如下:

using System;

using System.Collections.Generic;

using System.Text;

using System.Windows.Forms;

using System.Drawing;

namespace snake

{

public enum SnakeDirection

{

Up, Down, Left, Right

}

public enum SnakeState

{

Normal = 50, Fast = 20, Low = 100

}

public enum FoodType

{

Normal, Fast, Slow, Long, Short, LENGTH

}

}

using System;

using System.Collections.Generic;

using System.Text;

using System.Drawing;

namespace snake

{

public class Snake

{

public Snake(Point headLocation, int snakeLength, SnakeDirection direction)

{

bodiesLocation = new List<Point>();

bodiesLocation.Add(headLocation);

for (int i = 0; i < snakeLength; i++)

{

bodiesLocation.Add(new Point(-1, -1));

}

this.direction = direction;

this.speed = (int)SnakeState.Normal;

}

///<summary>向前移動一格</summary>

public void Run()

{

//從蛇尾開始,前面身體的位置替代後面的身體位置

for (int i = bodiesLocation.Count - 1; i >= 1; i--)

{

bodiesLocation[i] = bodiesLocation[i - 1];

}

//頭部向前走一步

Point head = bodiesLocation[0];

switch (direction)

{

case SnakeDirection.Up:

head = new Point(head.X, head.Y - 1);

break;

case SnakeDirection.Down:

head = new Point(head.X, head.Y + 1);

break;

case SnakeDirection.Left:

head = new Point(head.X - 1, head.Y);

break;

case SnakeDirection.Right:

head = new Point(head.X + 1, head.Y);

break;

}

bodiesLocation[0] = head; //因為PointStruct,是值型別,所以要賦值過來

}

///<summary>移動方向</summary>

public SnakeDirection Direction

{

get { return direction; }

set { direction = value; }

}

///<summary>狀態</summary>

public SnakeState State

{

get { return state; }

set

{

state = value;

speed = (int)state; //改變蛇的速度

}

}

///<summary>頭部位置</summary>

public Point HeadLocation

{

get { return bodiesLocation[0]; }

}

///<summary>蛇身體</summary>

public List<Point> BodiesLocation

{

get { return bodiesLocation; }

}

///<summary>蛇的速度</summary>

public int Speed

{

get { return speed; }

set { speed = value; }

}

///<summary>移動方向</summary>

private SnakeDirection direction;

///<summary>狀態</summary>

private SnakeState state;

///<summary>蛇身體的位置</summary>

private List<Point> bodiesLocation;

///<summary>蛇的速度</summary>

private int speed = (int)SnakeState.Normal;

}

}

using System;

using System.Collections.Generic;

using System.Text;

using System.Windows.Forms;

using System.Drawing;

namespace snake

{

public class Food

{

public Food(Point location,FoodType type)

{

this.location = location;

this.type = type;

}

public Food() { }

///<summary>食物型別</summary>

public FoodType Type

{

get { return type; }

set { type = value; }

}

///<summary>位置</summary>

public Point Location

{

get { return location; }

set { location = value; }

}

///<summary>食物型別</summary>

private FoodType type;

///<summary>位置</summary>

private Point location;

}

}

為了方便維護,定義了一個類GameManager,專門處理遊戲的邏輯,運算之類的。

首先這個類相當於一個遊戲,所以蛇,食物是必不可少的,

遊戲一定要有一個畫面的,所以要定義一個Draw()方法把畫面畫出來

要隨機產生食物,所以要定義一個produceFood()方法

蛇要吃到食物,所以要定義一個SnakeEatFood

相關推薦

C#實現貪吃遊戲

先說了,如果不會GDI+,類的定義這些基礎東西的,請先搜尋相關貼子學習。 這次教大家用C#做一個簡單的貪吃蛇遊戲。 先介紹用到的技術: GDI+ 定義類 列舉 因為C#是一門面向物件的語言,我們不用把所有程式碼都寫在一個窗體上,應該有一個分層思想(介面還介

C++語言實現貪吃遊戲

寫在前面 用C++語言寫遊戲再適合不過了,當然不是因為用它寫起來簡單,(相反那並不簡單),但是其效能絕對是其他語言沒法比的。所以這裡我會用C++實現一個貪吃蛇的遊戲。當然我可能有意隱瞞了你,因為我們不僅僅是用C++純語言來幹這件事,那會很彆扭,因為我們需要影象

C語言實現貪吃遊戲(VC6.0)

轉自C語言網 今天筆者為大家展示C語言寫的貪吃蛇遊戲,讓大家玩一玩自己寫的遊戲~ 是純C語言哦~VC6.0開發 無問題 首先,開始介面: 遊戲介面如下: 程式碼如下: 筆者VC6.0下編寫,測試無問題,可複製程式碼直接到VC6原始檔下,字尾為.c檔案

Java開發貪吃遊戲

for 焦點 == tint 素材 ide graph 點擊 perf 貪吃蛇遊戲的設計步驟: Part 1:     設計遊戲圖紙   畫出900*700的白色窗口   在窗口上添加畫布   在畫布上添加標題   在畫布上添加黑色遊戲區 Part 2:

JQuery實現貪吃遊戲

很久之前學jquery時寫的一個小遊戲,程式碼如下: <script type="text/javascript" src="jquery-3.2.1.js"></script> <script type="text/javascript"&

Java實現貪吃遊戲(含賬號註冊登入,排行榜功能)

原文在部落格園:https://www.cnblogs.com/leixiao-/p/9984836.html 這是我第一次工程實踐的作業,選題很多,但我只對其中的遊戲開發感興趣,可遊戲就兩三個型別,最終還是選擇了貪吃蛇。其實就貪吃蛇本身的程式碼實現還算是比較簡單的,可是實踐要求程式碼行達到

C語言貪吃遊戲

說明 我在2018年5月8日重新更新了貪吃蛇的程式碼,現在它比以前更精簡,且未使用全域性變數 函式均使用功能命名,可以輕易明白函式功能 貪吃蛇通過連結串列實現 你可以前往我的github下載此程式碼,僅可在vs下編譯,呼叫GameE

C++實現貪吃

寒假看完了C++primer plus 之後就一直在看反彙編和逆向,對於C++一直沒有拿出來做點實質性的東西。 最近書也看完了...沒事幹就想著做一個貪吃蛇來鍛鍊一下自己的C++編寫程式碼的水平。結果是  很煩,怎麼可以做出這麼醜的東西來。之前在看反彙編之前就想過做貪吃蛇,不

c++實現貪吃原理

先附上貪吃蛇效果圖: 蛇身用了佇列來實現,雖然不太優化,但是很容易理解,簡單來說,就是每一幀都把末尾的方塊去掉,把面前的方塊加進來,一旦佇列的size大於貪吃蛇的長度時,不斷出隊直到滿足。 w 實時監控a s

c++實現貪吃

c++面向物件實現控制檯貪吃蛇 學習了c++面向物件方面的知識,閒著無聊寫了貪吃蛇,主要由下面幾個類組成: MAP類實現地圖的渲染 蛇類實現蛇的初始化,渲染,行走,吃食物等行為 *食物類實現食物的初始化及生成 point類實現座標類 工具函式包括游標移動,

C 實現 貪吃

還有一個 MaxGrade.txt 檔案記錄最高分 建立一個即可 #include<iostream> #include<windows.h> #include<conio.h> #include<cstdlib&g

一步步教你怎麼python寫貪吃遊戲

目錄 0 引言 1 環境 2 需求分析 3 程式碼實現 4 後記 0 引言 前幾天,星球有人提到貪吃蛇,一下子就勾起了我的興趣,畢

JS實現貪吃遊戲

JavaScript 小遊戲 需要用到html、css、javascript 和 DOM 這些知識點就可以了。主要是js,其他只是一些基本的知識。js貌似也不是很難。但是問題就在這裏,即使知識點都會了,但是還是無法綜合運用把東西做出來 遊戲界面 先把整個遊戲界面做出來: <!DOCTYPE ht

基於EasyX庫的貪吃遊戲——C語言實現

接觸程式設計有段時間了,一直想學習怎麼去寫個遊戲來練練手。在看了B站上的教學終於可以自己試試怎麼實現貪吃蛇這個遊戲了。好了,廢話不多說,我們來看看如何用EasyX庫來實現貪吃蛇。 一、準備 工具vc++6.0 安裝庫檔案 EasyX庫安裝連結 可以安裝任意版本,本人安裝的

C程式碼寫貪吃遊戲--按鍵控制移動

通過按鍵控制蛇的移動,首先需要讀取按鍵,通過按鍵來控制。 通過百度後得知用kbhit(); 用一小段程式碼進行測試: 一直輸出Hello World,直到使用者按Esc結束 #include "stdafx.h" #include<st

[C語言]貪吃_結構數組實現

log pan 實現 position .html .cn 數據類型 title ack 一、設計思路 蛇身本質上就是個結構數組,數組裏存儲了坐標x、y的值,再通過一個循環把它打印出來,蛇的移動則是不斷地刷新重新打印。所以撞墻、咬到自己只是數組x、y值的簡單比較。 二、

Java實現貪吃遊戲(附完整原始碼)

今天我就從零開始來完成這個小遊戲,完成的方式也是一步一步的新增功能這樣的方式來實現。 第一步完成的功能:寫一個介面 大家見到的貪吃蛇小遊戲,介面肯定是少不了的。因此,第一步就是寫一個小介面。 實現程式碼如下: 第二步完成的功能:在介面上畫成一格一格的 我們見過的貪吃蛇遊戲

[原始碼和文件分享]基於WIN32 API介面程式設計實現貪吃遊戲

1 設計目的和任務 本次期末大作業採用課程設計的形式進行,作為《Windows程式設計》課程的期末考核。要求綜合運用Windows程式設計的相關知識,完成大作業的相關內容,並撰寫設計報告。其目的和任務是: 鞏固和加深學生對本課程基本知識的理解和掌握 熟悉使用Windows環

arduino編寫貪吃遊戲(完整程式碼)

用arduino編寫貪吃蛇小遊戲 裡面有大量的程式碼註釋,希望能真的幫助到電子愛好者。 工具 : 硬體:arduino UNO 、搖桿模組(控制貪吃蛇前後左右移動、 OLED 螢幕 軟體:arduino IDE1.8.2版本(基本上大於1.6版本,就能使用) 咱

c#實現拼圖遊戲

上學期程式是設計實驗之二,用c#實現一個拼圖遊戲 (一)需求:(這個需求書寫較為簡單) 圖片:有圖 切割:拼圖不是一個圖,我們需要把一個整圖它切割成N*N的小圖 打亂:把這N*N的小圖打亂順序,才能叫拼圖qwq 判斷:判斷拼圖是否成功 互動:選擇滑鼠點選拖動