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.mzph.cn/news/596508.shtml

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

相关文章

案例074:基于微信小程序的儿童预防接种预约管理系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder …

uniCloud 的 schema2code 【实用教程】

schema2code 用于通过 schema 文件&#xff0c;自动生成对表进行增删改查的操作页面。 以 uniCloud-aliyun/database/todo.schema.json 为例 {"bsonType": "object","required": [],"permission": {"read": true,"cr…

Halcon区域的面积和中心点area_center

Halcon区域的面积和中心点 提到区域的特征&#xff0c;最常用的莫过于区域的面积和中心点坐标信息。实际工作中&#xff0c;经常会使用面积或中心点进行特征的选择和定位。Halcon中的area_center算子就是用于实现这一功能的&#xff0c;该算子一次返回以下两个结果。 &#xf…

Vue3-33-路由-路由的别名配置 alias

别名的作用 路由中的别名配置&#xff0c;可以实现 多个路径 对应 同一个路由。 例如 &#xff1a; 路由的路径是 /a; 配置别名为 &#xff1a; /a2; 则 访问 /a 或 /a2 的时候&#xff0c;都可以访问到 同一个组件。 别名的特点 关键字 &#xff1a; alias 当通过别名进行路由…

认识CUDA

CUDA CUDA&#xff08;Compute Unified Device Architecture&#xff09;&#xff0c;是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构&#xff0c;该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构&#xff08;ISA&#xff09;以及…

抽奖的问题

import randomlucky_num [] # 存放中奖人名单&#xff0c;避免多次中奖 lucky_count 0 # 表示每一种奖品人数够了for time in range(0, 3): # 抽三次奖lucky_count 0 # 每次刷新print(f第一次抽奖现在开始&#xff0c;这次抽的是{3-time}等奖\n)# 判断奖品是哪个if time…

金和OA c6 uploadfileeditorsave接口存在任意文件上传漏洞

产品简介 金和网络是专业信息化服务商&#xff0c;为城市监管部门提供了互联网监管解决方案&#xff0c;为企事业单位提供组织协同OA系统升开发平台&#xff0c;电子政务一体化平台智慧电商平合等服务 漏洞概述 金和-c6 uploadfileeditorsave 任意文件上传&#xff0c;攻击者…

线程的基础

文章目录 线程的介绍&#xff1a;创建线程的三种方式&#xff1a;一、继承Thread二、实现Runnable接口三、实现Callable接口 线程的优先级&#xff1a;多线程&#xff1a;线程终止&#xff1a;线程常用方法&#xff1a;用户线程和守护线程线程的生命周期&#xff1a;Synchroniz…

MySQL慢查询日志分析(慢查询日志)

一、背景 &emsp;&emsp;MySQL的慢查询日志是MySQL提供的一种日志记录&#xff0c;他用来记录在MySQL中响应的时间超过阈值的语句&#xff0c;具体指运行时间超过long_query_time&#xff08;默认是10秒&#xff09;值的SQL&#xff0c;会被记录到慢查询日志中。 &em…

AI:112-基于卷积神经网络的美食图片识别与菜谱推荐

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队

一、前言 性能测试之于软件系统&#xff0c;是保障其业务承载能力及稳定性的关键措施。以软件系统的能力建设为主线&#xff0c;系统能力设计工作与性能测试工作&#xff0c;既有先后之顺序&#xff0c;亦有相互之影响。以上&#xff0c;在性能测试的场景决策&#xff0c;架构…

Android Matrix剪切clipPath缩放scale图片postTranslate圆形放大镜,Kotlin(1)

Android Matrix剪切clipPath缩放scale图片postTranslate圆形放大镜&#xff0c;Kotlin&#xff08;1&#xff09; 实现查看图片的放大镜&#xff0c;放大镜随着手指在屏幕上的移动&#xff0c;放大镜里面展示手指触点为中心、半径长度的圆形放大后的图片。 剪切出一块圆形Path…

基于微信小程序的停车预约系统设计与实现

基于微信小程序的停车预约系统设计与实现 项目概述 本项目旨在结合微信小程序、后台Spring Boot和MySQL数据库&#xff0c;打造一套高效便捷的停车预约系统。用户通过微信小程序进行注册、登录、预约停车位等操作&#xff0c;而管理员和超级管理员则可通过后台管理系统对停车…

13.Go 异常

1、宕机 Go语言的类型系统会在编译时捕获很多错误&#xff0c;但有些错误只能在运行时检查&#xff0c;如数组访问越界、空指针引用等&#xff0c;这些运行时错误会引起宕机。 一般而言&#xff0c;当宕机发生时&#xff0c;程序会中断运行&#xff0c;并立即执行在该gorouti…

Vue2 - diff 原理(动图演示)

目录 1&#xff0c;diffdiff 的时间点 2&#xff0c;_update 函数3&#xff0c;_patch 函数&#xff08;进行 diff&#xff09;3.1&#xff0c;根节点比较3.2&#xff0c;子节点比较 4&#xff0c;key的问题举例1举例2 1&#xff0c;diff 解释&#xff1a;对比新旧虚拟DOM树&a…

软件测试基础理论学习-软件测试方法论

软件测试方法论 软件测试的方法应该建立在不同的软件测试类型上&#xff0c;不同的测试类型会存在不同的方法。本文以软件测试中常见的黑盒测试为例&#xff0c;简述常见软件测试方法。 黑盒测试用例设计方法包括等价类划分法、边界值分析法、因果图法、判定表驱动法、正交试…

神经网络:经典模型热门模型

在这里插入代码片【一】目标检测中IOU的相关概念与计算 IoU&#xff08;Intersection over Union&#xff09;即交并比&#xff0c;是目标检测任务中一个重要的模块&#xff0c;其是GT bbox与pred bbox交集的面积 / 二者并集的面积。 下面我们用坐标&#xff08;top&#xff0…

数据结构与算法之美学习笔记:44 | 最短路径:地图软件是如何计算出最优出行路径的?

目录 前言算法解析总结引申 前言 本节课程思维导图&#xff1a; 我们学习了图的两种搜索算法&#xff0c;深度优先搜索和广度优先搜索。这两种算法主要是针对无权图的搜索算法。针对有权图&#xff0c;也就是图中的每条边都有一个权重&#xff0c;我们该如何计算两点之间的最短…

Docker安装Elasticsearch,kibana,ik分词器

安装elasticsearch 下载elasticsearch&#xff0c;查看版本&#xff1a;Elasticsearch Guide [8.11] | Elastic docker pull elasticsearch:7.17.16 查看镜像是否下载成功 docker images 创建网络&#xff0c;因为需要部署kibana容器&#xff0c;要让es和kibana容器互联 …

Spring——Spring基于注解的IOC配置

基于注解的IOC配置 学习基于注解的IOC配置&#xff0c;大家脑海里首先得有一个认知&#xff0c;即注解配置和xml配置要实现的功能都是一样的&#xff0c;都是要降低程序间的耦合。只是配置的形式不一样。 1.创建工程 1.1 pom.xml <?xml version"1.0" encoding…