用C#编写俄罗斯方块游戏-含代码

用C#编写俄罗斯方块游戏-含代码

效果展示

在这里插入图片描述
简介:
俄罗斯方块是很多人儿时玩过的游戏,作者本人也不例外,那是我玩的是手持式液晶屏游戏机,其趣味性极强,成为了儿时不可或缺的美好记忆。本文展示如何通过C#设计这样一款桌面游戏,同时也展示了如何规范的编写代码,对于C#初学者或迫切需要规范编码的人群非常友好。

项目结构

在这里插入图片描述
代码将游戏分成两部分:
1、Tetris.Core是一个动态链接库(DLL),他主要实现游戏的数据结构、逻辑以及算法,其实现与图形界面完全无关,所以可以方便的移植到别的UI实现方式,如WPF、Web,甚至可以移植到Web,而不需要修改Tetris.Core中的代码。
2、TetrisWF是实现展示游戏的UI模块,砖块的绘制和用户的交互动作都由他来实现,由于游戏功能已经在Core中实现,所以此模块的代码相对较少。

游戏核心类Game的实现代码

using System;
using System.Drawing;
using System.Timers;

namespace Tetris.Core
{
   
   
    /// <summary>
    /// 定义游戏对象
    /// </summary>
    public class Game
    {
   
   
        private Timer tmrEngine = null;//游戏执行时钟或引擎

        #region 基础数据结构
        /// <summary>
        /// 获取游戏当前的分数,从0开始
        /// </summary>
        public int Score {
   
    get; private set; }

        /// <summary>
        /// 获取游戏当前等级, 从1开始
        /// </summary>
        public int Level {
   
    get; private set; }

        /// <summary>
        /// 墙体对象
        /// </summary>
        public Wall Wall {
   
    get; }

        /// <summary>
        /// 获取当前砖块对象
        /// </summary>
        public Block Block {
   
    get; private set; }

        /// <summary>
        /// 获取当前砖块的中心点位置
        /// </summary>
        public Point CurrentBlockPosition {
   
    get; private set; } = Point.Empty;

        /// <summary>
        /// 获取下一个砖块对象
        /// </summary>
        public Block NextBlock {
   
    get; private set; }
        #endregion

        /// <summary>
        /// 设置或获取游戏的绘制宿主
        /// </summary>
        public IDrawing DrawingHost {
   
    get; set; } = null;

        /// <summary>
        /// 获取一个值,该值指示游戏是否已经结束
        /// </summary>
        public bool IsGameOver {
   
    get; private set; } = false;

        /// <summary>
        /// 获取砖块仓库对象
        /// </summary>
        private BlockStore BlockStore {
   
    get; } = null;

        /// <summary>
        /// 游戏结束时触发
        /// </summary>
        public event EventHandler GameOver = null;

        public Game(int wallWidth, int wallHeight, BlockStore blockStore)
        {
   
   
            this.Block = null;
            this.BlockStore = blockStore;
            this.NextBlock = blockStore.CreateNextBlock();
            this.Wall = new Wall(wallWidth, wallHeight, Color.Black);
        }

        /// <summary>
        /// 开始游戏
        /// </summary>
        public void Start()
        {
   
   
            if (IsGameOver)
            {
   
   
                Wall.Reset();
                IsGameOver = false;
            }
            if (tmrEngine == null)
            {
   
   
                tmrEngine = new Timer();
       
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值