C# 全屏label控件实现的贪吃蛇。

C#  全屏label控件实现的贪吃蛇。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.ProgressBar;namespace snake
{public partial class Form1 : Form{// 定义常量private const int BlockSize = 20; // 方块的大小private const int Width = 40; // 游戏界面的宽度private const int Height = 30; // 游戏界面的高度// 记录分数private int Score = 0;// 地图的二维数组private Label[][] Blocks = new Label[Width][];// 存储地图上每个方块的引用Label[,] map = new Label[Height, Width];// 贪吃蛇的移动方向private char moveDirection;// 食物的位置private int food_i, food_j;// 游戏是否失败private bool isFailure;// 初始化游戏private void InitializeGame(){// 将地图上的方块标记为0for (int i = 0; i < Height; i++)for (int j = 0; j < Width; j++)Blocks[i][j].Tag = 0;// 设置初始移动方向为向右moveDirection = 'D';// 设置蛇的初始位置和长度Blocks[10][10].Tag = 1;for (int i = 1; i <= 5; i++){Blocks[10][10 - i].Tag = i + 1;}// 在随机位置生成食物Random random = new Random();food_i = random.Next(2, Height - 5);food_j = random.Next(2, Width - 5);// 设置窗体标题Text = "贪吃小蛇蛇  上下左右键盘操作方向";}// 定时器的回调函数,控制游戏逻辑private void Timer_Tick(object sender, EventArgs e){// 如果游戏失败,则退出if (isFailure){return;}// 移动贪吃蛇MoveSnake();// 更新界面显示Show1();}// 更新界面显示private void Show1(){// 遍历地图上的每个方块for (int i = 0; i < Height; i++){for (int j = 0; j < Width; j++){int value = (int)Blocks[i][j].Tag;// 根据方块的值设置背景颜色Color color = value > 0 ? Color.FromArgb(111, 111, 111) : Color.FromArgb(222, 222, 222);Blocks[i][j].BackColor = color;// 设置方块的位置Blocks[i][j].Top = i * BlockSize;Blocks[i][j].Left = j * BlockSize;}}// 将食物方块的背景颜色设置为红色Blocks[food_i][food_j].BackColor = Color.Red;Blocks[food_i][food_j].Top = food_i * BlockSize;Blocks[food_i][food_j].Left = food_j * BlockSize;// 如果游戏失败,停止定时器,弹出提示框if (isFailure){timer1.Enabled = false;MessageBox.Show("Game Over~!!");button1.Enabled = true;}}// 移动贪吃蛇private void MoveSnake(){// 将蛇身体上的方块值加一for (int i = 0; i < Height; i++){for (int j = 0; j < Width; j++){if ((int)Blocks[i][j].Tag > 0){Blocks[i][j].Tag = (int)Blocks[i][j].Tag + 1;}}}// 找到蛇尾和蛇头的位置int oldTail_i = 0, oldTail_j = 0, oldHead_i = 0, oldHead_j = 0;int max_value = 0;for (int i = 0; i < Height; i++){for (int j = 0; j < Width; j++){int value = (int)Blocks[i][j].Tag;if (max_value < value){max_value = value;oldTail_i = i;oldTail_j = j;}if (value == 2){oldHead_i = i;oldHead_j = j;}}}// 计算蛇头新的位置int newHead_i = oldHead_i;int newHead_j = oldHead_j;if (moveDirection == 'W'){newHead_i = oldHead_i - 1;}else if (moveDirection == 'S'){newHead_i = oldHead_i + 1;}else if (moveDirection == 'A'){newHead_j = oldHead_j - 1;}else if (moveDirection == 'D'){newHead_j = oldHead_j + 1;}// 判断游戏是否失败if (newHead_i >= Height || newHead_i < 0 || newHead_j >= Width || newHead_j < 0 || (int)Blocks[newHead_i][newHead_j].Tag > 0){isFailure = true;return;}// 更新蛇头的位置Blocks[newHead_i][newHead_j].Tag = 1;// 判断是否吃到食物if (newHead_i == food_i && newHead_j == food_j){// 在随机位置生成新的食物Random random = new Random();food_i = random.Next(2, Height - 5);food_j = random.Next(2, Width - 5);// 增加分数Score += 1;txtScore.Text = "" + Score;}else{// 更新蛇尾的位置Blocks[oldTail_i][oldTail_j].Tag = 0;}}public Form1(){InitializeComponent();// 创建地图上的方块并添加到窗体中for (int i = 0; i < Height; i++){Blocks[i] = new Label[Width];for (int j = 0; j < Width; j++){Blocks[i][j] = new Label();Blocks[i][j].Height = BlockSize;Blocks[i][j].Width = BlockSize;Blocks[i][j].Tag = 0;Controls.Add(Blocks[i][j]);}}}// 开始按钮的点击事件private void button1_Click(object sender, EventArgs e){// 初始化游戏InitializeGame();// 启动定时器,控制游戏逻辑timer1.Start();// 重置分数Score = 0;txtScore.Text = "" + Score;// 禁用开始按钮button1.Enabled = false;}// 键盘按下事件private void Form1_KeyDown(object sender, KeyEventArgs e){// 根据按键设置移动方向switch (e.KeyCode){case Keys.Up:if (moveDirection != 'S'){moveDirection = 'W';MoveSnake();}break;case Keys.Left:if (moveDirection != 'D'){moveDirection = 'A';MoveSnake();}break;case Keys.Down:if (moveDirection != 'W'){moveDirection = 'S';MoveSnake();}break;case Keys.Right:if (moveDirection != 'A'){moveDirection = 'D';MoveSnake();}break;}}private void Form1_Load(object sender, EventArgs e){}}
}

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.ProgressBar;namespace snake
{public partial class Form1 : Form{private const int BlockSize = 20;private const int Width = 40;private const int Height = 30;private int Score = 0;private Label[][] Blocks= new Label[Width][];//地图的二维数组Label[,] map = new Label[Height, Width];private char moveDirection;private int food_i, food_j;private bool isFailure;private void InitializeGame(){for (int i = 0; i < Height; i++)for (int j = 0; j<Width; j++)Blocks[i][j].Tag = 0;        moveDirection = 'D';food_i = 0;food_j = 0;isFailure = false;Blocks[10][10].Tag =1;for (int i = 1; i <= 5; i++){Blocks[10][10 - i].Tag =i + 1;}Random random = new Random();food_i = random.Next(2, Height - 5);food_j = random.Next(2, Width - 5);Text = "贪吃小蛇蛇  上下左右键盘操作方向";}private void Timer_Tick(object sender, EventArgs e){if (isFailure){return;}MoveSnake();Show1();}private void Show1() {for (int i = 0; i < Height; i++){for (int j = 0; j < Width; j++){int value = (int)Blocks[i][j].Tag;Color color = value > 0 ? Color.FromArgb(111, 111, 111) : Color.FromArgb(222, 222, 222);Blocks[i][j].BackColor = color;Blocks[i][j].Top=i * BlockSize;Blocks[i][j].Left= j * BlockSize;}}Blocks[food_i][food_j].BackColor = Color.Red;Blocks[food_i][food_j ].Top=food_i * BlockSize;Blocks[food_i][food_j ].Left= food_j * BlockSize;if (isFailure) { timer1.Enabled = false;MessageBox.Show("Game Over~!!");button1.Enabled = true;}}private void MoveSnake(){for (int i = 0; i < Height; i++){for (int j = 0; j < Width; j++){if ((int)Blocks[i][j].Tag > 0){Blocks[i][j].Tag = (int)Blocks[i][j].Tag+1;}}}int oldTail_i = 0, oldTail_j = 0, oldHead_i = 0, oldHead_j = 0;int max_value = 0;for (int i = 0; i < Height; i++){for (int j = 0; j < Width; j++){int value = (int)Blocks[i][j].Tag;if (max_value < value){max_value = value;oldTail_i = i;oldTail_j = j;}if (value == 2){oldHead_i = i;oldHead_j = j;}}}int newHead_i = oldHead_i;int newHead_j = oldHead_j;if (moveDirection == 'W'){newHead_i = oldHead_i - 1;}else if (moveDirection == 'S'){newHead_i = oldHead_i + 1;}else if (moveDirection == 'A'){newHead_j = oldHead_j - 1;}else if (moveDirection == 'D'){newHead_j = oldHead_j + 1;}if (newHead_i >= Height || newHead_i < 0 || newHead_j >= Width || newHead_j < 0 || (int)Blocks[newHead_i][newHead_j].Tag > 0){isFailure = true;return;}Blocks[newHead_i][newHead_j].Tag = 1;if (newHead_i == food_i && newHead_j == food_j){Random random = new Random();food_i = random.Next(2, Height - 5);food_j = random.Next(2, Width - 5);Score +=1;txtScore.Text=""+Score;}else{Blocks[oldTail_i][oldTail_j].Tag = 0;}}public Form1(){InitializeComponent();for (int i = 0; i < Height; i++){Blocks[i] = new Label[Width];for (int j = 0; j<Width; j++){Blocks[i][j] = new Label();Blocks[i][j].Height=BlockSize;Blocks[i][j].Width =BlockSize;Blocks[i][j].Tag = 0;Controls.Add(Blocks[i][j]);}}}private void button1_Click(object sender, EventArgs e){InitializeGame();timer1.Start();Score = 0;txtScore.Text = ""+Score;button1.Enabled = false;}private void Form1_KeyDown(object sender, KeyEventArgs e){switch (e.KeyCode){case Keys.Up:                   if (moveDirection != 'S'){moveDirection = 'W';MoveSnake();}break;case Keys.Left:if (moveDirection != 'D'){moveDirection = 'A';MoveSnake();}break;case Keys.Down:if (moveDirection != 'W'){moveDirection = 'S';MoveSnake();}break;case Keys.Right:if (moveDirection != 'A'){moveDirection = 'D';MoveSnake();}break;}}private void Form1_Load(object sender, EventArgs e){}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙(OpenHarmony)系统之智能语音部件(1)

本文重点参考&#xff1a; OpenHarmony/ai_intelligent_voice_framework 一、总体概述 1. 功能简介及架构 智能语音组件包括智能语音服务框架和智能语音驱动&#xff0c;主要实现了语音注册及语音唤醒相关功能。 智能语音组件架构图如下图所示&#xff1a; &#xff08;1&a…

Go中interface != nil不一定不是nil

摘要&#xff1a; interface{} 值 ! nil不一定不是nil&#xff0c;应使用reflect库判断是否是nil。 测试示例&#xff1a; // todo interface ! nil 不一定 不是nil var value map[string]interface{} reqMap : make(map[string]interface{}) reqMap["key"] valu…

计算机丢失VCRUNTIME140_1.dll怎么办,6个不同方法教你解决问题

一、什么是vcruntime140_1.dll&#xff1f; vcruntime140_1.dll是Visual C Redistributable Packages的一部分&#xff0c;它是Microsoft Visual Studio开发环境中使用的运行时库文件。它包含了许多常用的函数和类&#xff0c;为开发者提供了丰富的功能支持。 二、vcruntime1…

听GPT 讲Rust源代码--compiler(9)

File: rust/compiler/rustc_trait_selection/src/traits/select/mod.rs 在Rust源代码中&#xff0c;rust/compiler/rustc_trait_selection/src/traits/select/mod.rs文件的作用是实现Rust编译器的trait选择器。 首先&#xff0c;让我们逐个介绍这些struct的作用&#xff1a; Se…

小红书12月内容趋势分析

为洞察小红书平台的内容创作趋势及品牌营销策略&#xff0c;新红推出12月月度榜单&#xff0c;从创作者、品牌、热搜词多方面入手&#xff0c;解析月榜数据&#xff0c;为从业者提供参考。 以下为12月部分榜单解析&#xff0c;想要查看更多行业榜单&#xff0c;创作优质内容&am…

走进UI设计的秘密武器!6款软件值得珍藏!

Adobe Photoshop AdobePhotoshop&#xff0c;简称“PS它是一个由Adobesystems开发和发行的图像处理软件。Photoshop主要处理由像素组成的数字图像。使用其大量的编辑和绘图工具&#xff0c;可以有效地编辑图片。PS在图像、图形、文本、视频、出版等方面具有许多功能。 截至20…

SDRAM小项目——SDRAM初始化配置

主要写了SDRAM的初始化模块&#xff0c;注重文档信息的查找&#xff0c;时序图的设计&#xff0c;SDRAM仿真插件的使用。 文档信息&#xff1a; 根据文档说明&#xff0c;SDRAM在使用之前必须先进行初始化 初始化之前要进行100us的延迟&#xff0c;在100us内除了INHIBIT和NOP命…

css sourcemap 源代码映射

vue.config.js css: {// Enable CSS source maps.sourceMap: process.env.NODE_ENV ! production, }重新运行&#xff1a;yarn serve 效果&#xff1a;

在Gradle工程中使用checkstyle来规范你的项目

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 系列专栏目录 [Java项…

【LLM】自主GPT-4:从ChatGPT到AutoGPT、AgentGPT、BabyAGI、HuggingGPT等

LangChain和LlamaIndex集成趋势后&#xff0c;GPT-4的新兴任务自动化和人工智能代理 ChatGPT和LLM技术的出现是革命性的。这些最先进的语言模型席卷了世界&#xff0c;激励开发人员、爱好者和组织探索集成和构建这些尖端模型的创新方法。因此&#xff0c;LangChain和LlamaIndex…

通往人工智能的 Go 之路

Agency 该库旨在为那些希望通过清晰、高效且符合 Go 语言惯例的方法来探索大型语言模型&#xff08;LLMs&#xff09;和其他生成式人工智能的开发人员而设计。 特点 纯 Go 语言&#xff1a;快速、轻量级&#xff0c;静态类型&#xff0c;无需涉及 Python 或 JavaScript编写清晰…

最优化理论期末复习笔记 Part 2

数学基础线性代数 从行的角度从列的角度行列式的几何解释向量范数和矩阵范数 向量范数矩阵范数的更强的性质的意义 几种向量范数诱导的矩阵范数 1 范数诱导的矩阵范数无穷范数诱导的矩阵范数2 范数诱导的矩阵范数 各种范数之间的等价性向量与矩阵序列的收敛性 函数的可微性与展…