关于用C#写贪吃蛇的问题

作者&投稿:褒佩 (若有异议请与网页底部的电邮联系)
C# 贪吃蛇代码的几个问题~

你可以list
_List
=
new
List();然后把属于蛇的button都放在
_List里面,当蛇吃到一个食物的时候就
_List.Add(new
Button());移动的时候一个个按钮移动,就是在你的Timer_Tick()事件中加一个for循环或者foreach循环,然后控制每个按钮移动。可能我这个方法有点笨,对内存消耗也比较大,但是没办法,谁让咱不聪明呢,只能用笨方法了。楼主如果找到好方法可以交流下

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
BufferedGraphics BufferedGraphicsA = null;
BufferedGraphics BufferedGraphicsB = null;
private void Form1_Load(object sender, EventArgs e)
{
BufferedGraphicsContext context = BufferedGraphicsManager.Current;
BufferedGraphicsA = context.Allocate(this.CreateGraphics(), this.ClientRectangle);
BufferedGraphicsB = context.Allocate(BufferedGraphicsA.Graphics, this.ClientRectangle);
Pen pen = new Pen(Brushes.Blue,3);
for(int i = 0;i < 400;i += 20)
{
BufferedGraphicsB.Graphics.DrawLine(pen, new Point(0, i), new Point(400, i));
BufferedGraphicsB.Graphics.DrawLine(pen, new Point(i, 0), new Point(i, 400));
}
BufferedGraphicsB.Render();
food = this.GetPoint(random);
BufferedGraphicsA.Graphics.FillRectangle(Brushes.Yellow, new Rectangle(food, new Size(20, 20)));

BufferedGraphicsA.Render();
Point p = this.GetPoint(random);
PointList.Add(p);

}
List PointList = new List();
Point food = Point.Empty;
Random random = new Random(DateTime.Now.Millisecond);
Keys key = Keys.Left;
private void timer1_Tick(object sender, EventArgs e)
{

if (PointList.Count > 0)
{
Point first = PointList[0];
switch (key)
{
case Keys.Left:
first.X -= 20;
break;
case Keys.Right:
first.X += 20;
break;
case Keys.Up:
first.Y -= 20;
break;
case Keys.Down:
first.Y += 20;
break;
}
if (PointList.IndexOf(first, 0) >= 0)
{
this.timer1.Enabled = false;
MessageBox.Show("游戏结束");

}
BufferedGraphicsB.Render();
BufferedGraphicsA.Graphics.FillRectangle(Brushes.Yellow, new Rectangle(food, new Size(20, 20)));
PointList.Insert(0, first);
if (food != first)
PointList.RemoveAt(PointList.Count - 1);
else
{
food = this.GetPoint(random);
BufferedGraphicsA.Graphics.FillRectangle(Brushes.Yellow, new Rectangle(food, new Size(20, 20)));
}
foreach(Point p in PointList)
BufferedGraphicsA.Graphics.FillRectangle(Brushes.Red,new Rectangle(p,new Size(20,20)));

BufferedGraphicsA.Render();
}
}

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
key = e.KeyData;
}
private Point GetPoint(Random random)
{
int x = (random.Next(400) / 20) * 20;
int y = (random.Next(400) / 20) * 20;
return new Point(x, y);
}

private void Form1_Paint(object sender, PaintEventArgs e)
{
BufferedGraphicsA.Render();
}


}
}

分析下有哪些必须的?
1:前进方向
前进方向统一时间只有一个,也就是说当你按上下左右后 把你所按的值改变前进方向(你可以先用 button 来做。4个button 分别选择4个方向)
2:移动速度
不论你是否按了方向蛇都是会移动的!所以这里你可以用一个循环来控制蛇移动
而你按了上下左右之后知识改变方向
3:边界
这个给你个思路 就是
X 开始 0 X结束 100
Y 开始 0 Y结束 100
然后放入数组
4:蛇的位置
蛇的位置是不规则的
但是总有规律 你也可以用数组或集合
比如 蛇是L形状的 那么 他的位置 你可以记录
XList[0]="1";
YList[0]="1";

XList[1]="1";
YList[1]="2";

XList[2]="1";
YList[2]="3";

XList[3]="2";
YList[3]="4";

至于蛇吃东西之后 是尾巴后面也就是说
根据后最后2个存储的坐标就可以知道哪一个格子 +1
比如 X[倒数2] = 3;Y[到处2]=1;X[倒数1] = 2;Y[到处1]=1;那么蛇头肯定向右
那么我们就在 X.Add(X[倒数1]+1);Y.Add(Y[倒数1]);
具体程序怎么判断得看你了~
对于撞墙
做一个MAPX 开始 和 结束 和 MAPY 开始 结束 然后 用蛇的X[] 和Y[]进行比对
如果一样肯定是撞墙了
思路有了 加油吧 先把基本的行动控制完成
然后再吃东西

游戏的开发有相应的算法,最基本的就是碰撞检测算法,这个在贪吃蛇及俄罗斯方块里都有很经典的体现
移动,吃豆后变长,主要是在碰撞检测成功后再相应的画图,
键盘控制主要就是KeyPress事件了,还有存档,主要是记录一些坐标数据,楼主要是有兴趣的话,可以联系我,我用C#写过贪吃蛇,可以给你发一份源码

控制好说啦,获得用户输入的按键
switch(用户按下的键)
case 上:
case 下:
case 左:
case 右:
case 其他:
default:

至于刷屏就看你用什么方法实现显示的啦,一般就是用timer每隔一小段时间把你的贪吃蛇的属性显示一遍。
看看下面的代码,演示了一个蛇头向右移动的例子:当然这只是一种演示,实际的游戏不应该这么写的:
private void Form1_Load(object sender, EventArgs e)
{
_L1 = new Label();
_L1.Location = new Point(50, 50);
_L1.Text = "蛇头";
this.Controls.Add(_L1);
}

private void button1_Click(object sender, EventArgs e)
{
Timer t = new Timer();
t.Interval = 200;
t.Tick += new EventHandler(t_Tick);
t.Start();
}

void t_Tick(object sender, EventArgs e)
{
文本框每隔0.2秒,X坐标加1,也就是向右移动1
_L1.Location = new Point(_L1.Location.X + 1, 50);
}

控制台倒是有点难度呀,你的好好研究一下关于控制台的输入输出原理呀。


用c语言编写的程序被称为
用c语言编写的程序被称为源程序。C语言是一种编程语言,是其中最重要和最基础的语言之一。它是由贝尔实验室的Dennis Ritchie在1970年代初开发的,并于1972年首次应用于UNIX操作系统的开发。C语言具有强大的控制能力,支持面向对象、结构化、指针和动态内存分配等特性。C语言是非常流行的编程语言,被广泛用...

计算机C语言有什么用啊??
5、C语言适用范围大。适合于多种操作系统,如Windows、DOS、UNIX、LINUX等等;也适用于多种机型。C语言对编写需要硬件进行操作的场合,明显优于其它高级语言,有一些大型应用软件也是用C语言编写的。

C语言的特点有哪些?
C语言传递参数均是以值传递,另外也可以传递指针。不同的变量类型可以用结构体组合在一起。只有32个保留字,使变量、函数命名有更多弹性。部份的变量类型可以转换,例如整型和字符型变量。通过指针,C语言可以容易的对存储器进行低级控制。预编译处理让C语言的编译更具有弹性。

C语言和C++有什么区别?
1、C语言:是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。2、C++:是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计。二、优势不同 1、C语言:能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要...

什么是c语言最基本成分,用它可以描述程序的流程控制对数据进行处理...
4、 C语言适用范围大。适合于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。 C语言对编写需要硬件进行操作的场合,明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。 C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和...

c语言是有什么
含义:C语言是国际上广泛流行的、很有发展前途的计算机高级语言。它适合作为系统描述语言,即可用来编写系统软件,也可用来编写应用软件。早期的操作系统等系统软件主要是用汇编语言编写的(包括 UNIX操作系统在内)。由于汇编语言依赖于计算机硬件,程序的可读性和可移植性都比较差。为了提高可读性和可移植性,最好改用高级...

用C语言开发简单的应用系统程序,源代码不得少于150行
用C语言开发简单的应用系统程序,源代码不得少于150行,必须用TurboC2.0编程,程序应有友好的人机交互界面、完善的功能和实用性,大哥大姐们,帮帮忙拉,我实在是不会做啊。。。... 用C语言开发简单的应用系统程序,源代码不得少于150行,必须用Turbo C2.0编程,程序应有友好的人机交互界面、完善的功能和实用性,大哥大姐...

可以使用c语言写COMSOL吗?
COMSOLMultiphysics一共提供了五个求解器,各有各的优势,分别适合于不同的场合。其中UMFPACK求解器最为简单快速,但缺点是占用大量内存;SPOOLES求解器的原理和UMFPACK求解器有些相似,但收敛方法不一样;GMRES求解器适用于大规模问题,可以有效降低内存占用量;Conjudategradients求解器使用共厄梯度法求解,在...

程序设计基础是c语言吗
虽然C语言是一种高效、灵活的编程语言,并且被广泛应用于各种领域,但是在使用C语言时也需要注意一些问题。首先,需要注意C语言的指针和内存管理,因为这些内容相对来说比较难懂,而且容易导致程序的错误。其次,需要注意安全问题。由于C语言没有内置很多安全机制,因此程序员需要自己相当地小心在设计程序时防止...

写c语言用什么软件比较好啊?
学c语言可以用的软件推荐如下:1、TurboC是由美国Borland公司开发的一套C语言程序开发工具,Borland公司是一家专门从事软件开发、研制的大公司。该公司相继推出了一套Turbo系列软件,如TurboBASIC、TurboPascal、TurboProlog,这些软件很受用户欢迎。TurboC集成了程序编辑、调试、链接等多种功能。2、WIN-TC是...

抚顺市13424417728: 关于用C#写贪吃蛇的问题 -
并颖多动: 分析下有哪些必须的?1:前进方向前进方向统一时间只有一个,也就是说当你按上下左右后 把你所按的值改变前进方向(你可以先用 button 来做.4个button 分别选择4个方向)2:移动速度不论你是否按了方向蛇都是会移动的!所以这里你可...

抚顺市13424417728: C#做贪吃蛇的问题 -
并颖多动: 绘图的时候 蛇尾的颜色 变成背景色,并且将蛇尾的节点对象 Dispose掉

抚顺市13424417728: 贪吃蛇程序 - 用C#编写一个贪吃蛇的程序,
并颖多动: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System. Text; using System...

抚顺市13424417728: 利用C#编写贪吃蛇长度算法 -
并颖多动: 先介绍用到的技术:GDI+ 定义类 枚举 因为C#是一门面向对象的语言,我们不用把所有代码都写在一个窗体上,应该有一个分层思想(界面还界面,数据处理还数据处理),如果还要网上对战的话,搞个三层吧(界面层,数据处理或逻辑层,...

抚顺市13424417728: 用c#写贪吃蛇的方法?? -
并颖多动: 额定义一个字段为方向X蛇就设为自定义类body的list,body所含属性有改点的X,Y坐标等,构造函数加一个传坐标的.果实定义一个Food类,含坐标等.试试利用一个timer控件(timer1),利用该控件的事件,设定时间间隔一到就clear画布上的...

抚顺市13424417728: C# 贪吃蛇的问题?? -
并颖多动: 不用控件的,我都是定义一个类,类里面有个方法专门绘制自身,还有一些x,y,vx,vy之类表示速度坐标方向,组合起来就是一条蛇了,很容易也比较符合面向对象.

抚顺市13424417728: 帮忙C#编写贪吃蛇 -
并颖多动: RedSnake 设计说明书背景开发环境:Microsoft Visual Studio .Net 2003开发语言:C# 开发者:Red_angelX主界面设计左边是游戏区域,由一个picturebox和lable组成,picturebox用来绘制游戏界面,label用来显示游戏是否运行.右边是状态区...

抚顺市13424417728: C# 贪吃蛇代码的几个问题 -
并颖多动: 你可以list _List = new List();然后把属于蛇的button都放在 _List里面,当蛇吃到一个食物的时候就 _List.Add(new Button());移动的时候一个个按钮移动,就是在你的Timer_Tick()事件中加一个for循环或者foreach循环,然后控制每个按钮移动.可能我这个方法有点笨,对内存消耗也比较大,但是没办法,谁让咱不聪明呢,只能用笨方法了.楼主如果找到好方法可以交流下

抚顺市13424417728: 求高手指导! 我用C#制作的贪吃蛇游戏,怎么才能从一个页面加载到游戏界面? -
并颖多动: 首先在Program.cs中设置从Form1启动,然后在Form1中启动Form2,同时隐藏自身.这是第一种.第二种:启动Form2时,默认为不可见,然后在From2中启动Form1,当Form1运行完成后,改变Form2的可见性.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网