- 浏览: 179467 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (140)
- java (138)
- 佳能500d (1)
- 佳能 (1)
- Oracle数据库文档构造器--Oraschemadoc (1)
- EJB调用的原理分析 (1)
- 使用css3画"静音"icon (1)
- 张小庆,在路上(16)-给弟弟找工作 (1)
- Android短信编解码方式 (1)
- lua web 开发 (1)
- zk安装 (1)
- 菜单多国语言化遇到的问题 (1)
- 【转】纯文本配置还是注册表 (1)
- C++ delete删除动态分配的内存 (1)
- eclipse下修改项目名导致tomcat内发布名不一致的解决方法 (1)
- Lucene实现各种常见文档的全文检索 (1)
- 项目风险之人员流动风险 (1)
- 时空数据模型简介 (1)
- XSLT学习笔记 (1)
- 依然是计划 如果没有计划似乎就没有了动力 (1)
- How to Succeed in A Professional Career (1)
- 编程环境应该和讨论社区完美的进行结合 (1)
- C#坦克大战实现 (1)
- 电脑用户密码忘记了怎么办? (1)
- java.lang.NoClassDefFoundError: org/dom4j/DocumentException (1)
- 关于成立北京Android爱好者俱乐部的声明 (1)
- Android开发之初探音频的播放 (1)
- Struts标签循环List (1)
- CAP原理 (1)
- javabean的自动生成 (1)
- 打开CMD一闪就关的解决方案 (1)
- 我是项目经理,我的项目管理日记【20111202】 (1)
- Html5游戏开发入门笔记--<躲砖块> (1)
- mysql中查看和设置系统字符编码 (1)
- PhoneGap-Accelerometer (1)
- [Jetty]Jetty工作原理 (1)
- Ibatis+Spring整合实例Demo+源码 (1)
最新评论
-
u012985907:
dsdsdsdsd
FLASH上传与拍照 -头像-avatart -
a379933101:
?????????????????????????????
android listview 连续调用 getview问题分析及解决 -
151tmac:
拜托下次粘贴的时候,粘贴为纯文本
android listview 连续调用 getview问题分析及解决 -
liudezhong135:
...
Spring3MVC 在JSP中使用@ModelAttribute -
香飘飘2011:
要是不知道层次级别,如何退回到根目录呢
FTP退回到根目录
记得在大学学java时,同学在下载了很多java的视频,看到里面有些是介绍简单游戏开发的,马士兵老师讲的,挺感兴趣的。一起看了看视频写了写程序。现在毕业了,因为工作中用的是C#,最近很想拿C#把以前写的坦克大战重写下,来熟悉熟悉C#的基本语法。
程序很简单,跟java代码相比没有多大改动
实现方法如下
1.在form中添加一个panel,在panel的 Paint方法中得到Graphics对象
2.通过Graphics对象再panel画出坦克,子弹等相关内容
3.添加timer控件 来控制panel的重画 实现坦克,子弹的运动
4.根据电脑按下的方向键,确定出坦克的方向,panel重画时根据坦克的方向修改坦克的X,Y轴坐标,来实现坦克的移动
5.通过Rectangle的IntersectsWith函数来进行碰撞检测,实现子弹打击坦克
具体实现代码
1.在项目里面添加枚举类型
/// <summary>
/// 表示方向的的枚举类型
/// </summary>
public enum Direction { L, U, D, R, STOP }
2.添加子弹类的相关常量,属性
/// <summary>
/// 子弹X轴的速度,单位PX
/// </summary>
public static int XSPEED = 10;
/// <summary>
/// 子弹Y轴的速度,单位PX
/// </summary>
public static int YSPEED = 10;
/// <summary>
/// 子弹的宽度
/// </summary>
public static int WIDTH = 10;
/// <summary>
/// 子弹的高度
/// </summary>
public static int HEIGHT = 10;
/// <summary>
/// 子弹的坐标
/// </summary>
int x, y;
/// <summary>
/// 子弹的方向
/// </summary>
Direction dir;
/// <summary>
/// 子弹的存活状态
/// </summary>
private bool live = true;
/// <summary>
/// TankClient窗体实例
/// </summary>
private TankClient tankClient;
/// <summary>
/// 敌我双方的标记
/// </summary>
private bool good;
3.添加draw方法来画出子弹
public void Draw(Graphics g)
{
if (!live)
{
tankClient.missiles.Remove(this);
return;
}
//通过画椭圆函数在界面上显示子弹
g.FillEllipse(Brushes.Black, x, y, Missile.WIDTH, Missile.HEIGHT);
Move();
}
4.添加子弹打击坦克的方法
public bool HitTank(Tank t)
{
//用IntersectsWith来检测两个矩形相碰撞
if (GetRectangle().IntersectsWith((t.GetRectangle())) && t.Live && this.live && this.good != t.Good)
{
t.Live = false;
this.live = false;
return true;
}
return false;
}
5.添加坦克类相关属性,常量
/// <summary>
/// 坦克x轴的速度
/// </summary>
public static int XSPEED = 5;
/// <summary>
/// 坦克y轴的速度
/// </summary>
public static int YSPEED = 5;
/// <summary>
/// 坦克的宽度
/// </summary>
public static int WIDTH = 30;
/// <summary>
/// 坦克的高度
/// </summary>
public static int HEIGHT = 30;
/// <summary>
/// 坦克的坐标
/// </summary>
private int x, y;
/// <summary>
/// 标记上下左右键是否按下
/// </summary>
private bool l = false, u = false, r = false, d = false;
/// <summary>
/// 坦克的方向
/// </summary>
private Direction dir = Direction.STOP;
/// <summary>
/// 坦克炮筒方向
/// </summary>
private Direction ptDir = Direction.D;
/// <summary>
/// TankClient窗体实例
/// </summary>
TankClient tankClient;
/// <summary>
/// 标记敌我双方
/// </summary>
private bool good;
/// <summary>
/// 控制敌人坦克不规则运行时使用
/// </summary>
private int step = 0;
/// <summary>
/// 标记坦克的存活状态
/// </summary>
private bool live = true;
6.在tank类中实现画坦克方法
public void Draw(Graphics g)
{
if (!live)
{
if (!good)
{
tankClient.tanks.Remove(this);
}
return;
}
if (good)
{
//通过FillEllipse来画坦克
g.FillEllipse(Brushes.Red, x, y, WIDTH, HEIGHT);
}
else
{
g.FillEllipse(Brushes.Blue, x, y, WIDTH, HEIGHT);
}
//根据炮筒坦克来画出坦克的炮筒
switch (ptDir)
{
case Direction.D:
g.DrawLine(Pens.Black, x + WIDTH / 2, y + HEIGHT / 2, x + WIDTH / 2, y + HEIGHT);
break;
case Direction.U:
g.DrawLine(Pens.Black, x + WIDTH / 2, y + HEIGHT / 2, x + WIDTH / 2, y);
break;
case Direction.L:
g.DrawLine(Pens.Black, x + WIDTH / 2, y + HEIGHT / 2, x, y + HEIGHT / 2);
break;
case Direction.R:
g.DrawLine(Pens.Black, x + WIDTH / 2, y + HEIGHT / 2, x + WIDTH, y + HEIGHT / 2);
break;
}
Move();
}
7.键盘按键处理的相关代码
public void KeyPressed(KeyEventArgs e)
{
Keys key = e.KeyCode;
switch (key)
{
case Keys.Right:
r = true;
break;
case Keys.Left:
l = true;
break;
case Keys.Up:
u = true;
break;
case Keys.Down:
d = true;
break;
}
LocateDirection();
}
8.tank发子弹的方法
public Missile Fire()
{
if (!live) return null;
int x = this.x + WIDTH / 2 - Missile.WIDTH / 2;
int y = this.y + HEIGHT / 2 - Missile.HEIGHT / 2;
Missile missile = new Missile(x, y, good, ptDir, tankClient);
tankClient.missiles.Add(missile);
return missile;
}
9.主窗体类加入坦克
myTank = new Tank(50, 20, true, this);//放到前面 this不能用 //y轴比java的减少了30
for (int i = 0; i < 15; i++)
{
//添加10个坦克x轴间距为40px
tanks.Add(new Tank(50+40*(i+1),20,false,this)); //y轴比java的减少了30
}
10.主窗体类中调用子弹打击坦克的方法
for (int i = 0; i < missiles.Count; i++)
{
Missile m = missiles[i];
m.HitTank(myTank);
m.HitTanks(tanks);
m.Draw(g);
}
11.主窗体处理按键代码
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
myTank.KeyPressed(e);
}
12.控制重画代码
private void timer1_Tick(object sender, EventArgs e)
{
//间隔50毫秒控制panel的重画
panel1.Invalidate();
}
13.这是主要代码基本完成,但是游戏会有闪烁问题
可以通过双缓冲来解决,C#解决时很省事,一个函数就能解决
this.SetStyle(ControlStyles.OptimizedDoubleBuffer |
ControlStyles.ResizeRedraw |
ControlStyles.AllPaintingInWmPaint, true);
顺便改了个手机版本的但是手机版本的没能解决双缓冲问题,屏幕有些闪烁,朋友们可以自己改进
代码下载http://download.csdn.net/source/3058026
<br>
<span style="font-family: Arial; font-size: 14px; line-height: 26px;">如果你发现有什么不合理的,需要改进的地方,<span style="font-family: 'lucida Grande',Verdana; font-size: 14px; line-height: 23px;">邮件联系328452421@qq.com(qq常年不在线,邮件联系)</span> 朱晓 。相互交流 谢谢</span><br>
<img src="http://hi.csdn.net/attachment/201012/18/0_1292677553mFm1.gif" alt="">
毕竟不是搞美工的界面很烂。。。
发表评论
-
Ibatis+Spring整合实例Demo+源码
2012-02-08 12:58 1437<span style="color: ... -
[Jetty]Jetty工作原理
2012-02-07 17:29 1011http://www.ibm.com/develo ... -
PhoneGap-Accelerometer
2012-02-07 14:23 1232采集设备在x、y、z方向上的动作。 acce ... -
mysql中查看和设置系统字符编码
2012-02-04 14:28 1734--查看数据库的字符集 show variables ... -
Html5游戏开发入门笔记--<躲砖块>
2012-02-03 12:04 1188学习了html5中的canvas画布元素,自己写了一个 ... -
我是项目经理,我的项目管理日记【20111202】
2012-02-03 10:19 1020其实前段时间项目 ... -
打开CMD一闪就关的解决方案
2012-02-02 12:14 1425转:http://blog.163.com/cumt_ ... -
javabean的自动生成
2012-02-02 11:59 1438在jcreator pro中自动生成 在j ... -
CAP原理
2012-02-01 09:00 1184作者:NinGoo 原文链接:ht ... -
Struts标签循环List
2012-01-31 14:18 992<pre name="code&quo ... -
Android开发之初探音频的播放
2012-01-11 16:29 1142<h1>Android开发之初探音频的播放 ... -
关于成立北京Android爱好者俱乐部的声明
2012-01-11 14:33 892<blockquote dir="lt ... -
java.lang.NoClassDefFoundError: org/dom4j/DocumentException
2011-12-28 13:03 15186<span style="font-f ... -
电脑用户密码忘记了怎么办?
2011-12-28 12:14 1012<span style="fon ... -
编程环境应该和讨论社区完美的进行结合
2011-12-19 11:54 792在学习.NET过程中,经常会遇到很多问题,有的时候会找 ... -
How to Succeed in A Professional Career
2011-12-19 10:29 769(From Microsoft)<br>& ... -
依然是计划 如果没有计划似乎就没有了动力
2011-12-15 10:39 903</span></span>& ... -
XSLT学习笔记
2011-12-14 14:04 694<p class="MsoNorma ... -
时空数据模型简介
2011-12-14 13:59 1520<p class="MsoNo ... -
项目风险之人员流动风险
2011-12-13 12:29 1218<p class="MsoNorma ...
相关推荐
《坦克大战 C# 可视化实现:代码详解与学习指南》 坦克大战是一款深受玩家喜爱的经典游戏,而使用C#进行可视化实现则为开发者提供了一个极好的学习平台。本项目不仅适用于课程设计,也是深入理解C#编程、图形界面...
【坦克大战简单实现c#实现】是一个非常适合C#初学者的项目,旨在通过实践学习C#编程语言的基础知识以及游戏开发的基本概念。这个项目利用了Visual Studio 2005作为开发环境,C# 2.0作为编程语言,为我们提供了一个...
本文将围绕"C#坦克大战"这一主题,深入探讨相关知识点,并对程序的实现进行分析。 首先,我们要了解C#的基础知识。C#是微软公司推出的面向对象的编程语言,广泛应用于Windows平台的应用开发,尤其是游戏开发。其...
《C#坦克大战源码解析与学习指南》 在编程学习的过程中,实战项目是提升技能的重要环节。"C#坦克大战"就是一个极佳的实践项目,它能够帮助开发者深入理解和运用C#语言的核心特性,尤其是涉及到图形绘制、事件处理...
《C#实现坦克大战游戏详解》 坦克大战是一款经典的电子游戏,深受玩家喜爱。通过C#编程语言,我们可以实现这个游戏的诸多功能,包括地图初始化、坦克的生成与控制、敌方坦克的随机出现以及子弹的发射与爆炸效果。在...
《C#游戏编程坦克大战》是一款使用C#编程语言开发的简单但有趣的游戏,它集成了编程技术、游戏设计和互动娱乐元素。本项目旨在帮助开发者掌握C#的基础语法、面向对象编程思想以及游戏开发的基本流程。下面将详细介绍...
### 基于C#.NET的坦克大战游戏的设计与实现 #### 1. 项目背景与概述 在当今数字化时代,游戏开发已成为一种流行的技术应用领域。本项目旨在利用C#.NET这一现代化的编程框架来设计并实现一款经典的坦克大战游戏。...
【C# 坦克大战】是一款经典的基于C#编程语言开发的射击游戏...以上就是C#坦克大战项目中涉及的一些核心知识点。学习和理解这些内容,不仅能帮助你开发出自己的坦克大战游戏,还能为其他类型的2D游戏开发打下坚实基础。
《C#坦克大战:初学者的编程乐园》 在编程世界中,坦克大战是一个经典的案例,它可以帮助初学者深入理解游戏开发的基本原理和技术。本文将详细介绍由C#语言实现的坦克大战项目,以及这个项目对初学者的重要价值。 ...
《C#坦克大战》是一款利用C#编程语言开发的双人对战游戏,它将经典的坦克战斗场景重新构建在了计算机屏幕上,为玩家提供了一种全新的互动体验。在这个项目中,我们将深入探讨C#编程语言在游戏开发中的应用,以及如何...
《C#坦克大战》是一款基于C#编程语言开发的经典游戏,它将传统的坦克对战游戏与现代编程技术相结合,为玩家提供了一种独特的娱乐方式。这款游戏的开发涉及到多个IT领域的知识,包括图形用户界面设计、游戏逻辑编程、...
总的来说,《C#坦克大战[源码]》是一个很好的学习资源,可以帮助开发者理解C#编程基础,对象导向设计,事件处理,以及简单的游戏逻辑实现。通过阅读和分析源码,你可以更深入地了解如何将理论知识应用于实际项目,...
【标题】"用c#编写的坦克大战(c#版)"揭示了这是一个使用C#编程语言实现的经典游戏——坦克大战的复刻版本。在C#这种面向对象的语言环境下,开发者可能利用其强大的类库和面向对象特性来构建游戏逻辑。 【描述】...
【C#简单的坦克大战】是一款基于C#编程语言开发的小型游戏,旨在向开发者和学习者展示如何利用C#实现一款基本的射击类游戏。在这个游戏中,玩家将控制坦克进行战斗,通过移动和发射炮弹来击败敌人。下面我们将详细...
"C#坦克大战游戏"是一个基于C#语言实现的经典游戏项目,它旨在帮助开发者熟悉游戏编程的基本概念、算法以及C#语言的特性。 一、游戏框架与设计模式 在C#坦克大战游戏中,首先需要建立一个游戏框架。这通常涉及到...
这是本人花了几天时间,赌气做的坦克大战。游戏实现了墙体地图,敌方四种坦克,每种坦克生命值不一样...本游戏的优点:玩家坦克在移动的时候可以同时发射子弹,这是其他坦克大战代码未能实现的。——zufe-info-yixiapan
现在毕业了,因为工作中用的是C#,最近很想拿C#把以前写的坦克大战重写下,来熟悉熟悉C#的基本语法。 程序很简单,跟java代码相比没有多大改动 开发环境 vs2008 实现方法如下 1.在form中添加一个panel,在panel的 ...
总的来说,坦克大战C#代码的实现涵盖了C#编程的多个重要方面,对于初学者来说,这是一个很好的学习项目,可以帮助他们理解并掌握C#语言和游戏开发的基本技巧。同时,对于有经验的开发者,这也是一个挑战和提升编程...
通过这些技术的综合运用,C#版坦克大战地图编辑功能得以实现,使得每一个玩家都可以成为游戏的创作者,创造出无数独特的战斗场景,极大地扩展了游戏的生命周期和娱乐价值。 总结来说,C#版坦克大战展示了编程语言在...