DS课设【坦克大战最短路】(MummyDing)


DS课设【坦克大战最短路】

     还是决定写点东西简单记录下这次编码。

一、想法

    还没放假的时候只想着用C#实现,算法图论方面觉得图论方向会靠谱些,但一直没有什么好点子。C#以前也没学过,自信来源于MFC的学习经历(以前也是用它做了C语言课设)。C#应该是没有MFC那么复杂的,心想看几天应该就可以上手一些小东西了,事实证明也如此。
    寒假时间相对以前更长,也并不着急做课设。开始一段是刷题+学习Kinect+顺带了解Kinect,后来在刷题过程中遇到这题,还蛮有意思的,当即就写了个“坦克大战最短路简单设计”:

坦克大战最短路
算法:优先队列+广度优先搜索
用户自定义地图
1.	设置地图大小起点和终点 设置弹药
2.	设置铁墙、土墙、河水
3.	
模式一:用户自己走
模式二:自动给出最短路
对比
坦克方法:
1.	调整方向
2.	开枪
事件:
判断是否达到
是否可以走
是否打到墙(子弹能可以穿过河)
游戏是否结束
人性化:
背景音乐
子弹效果
保存地图
当前最短
爆炸效果

二、实现

当时也没有十足把握能实现它,搁置了几天。期间看了一些关于C#项目开发的教学视频,也是跟着例程做了下,心里有底了,首先实现UI是没有问题的。
然后就有了下面这个详细设计文档:
一、界面
1、地图
大小 12*12  每个方格 边长60个像素
左上角为原点(0,0)
2、对象
坦克(Tank)
砖块(Brick)  1次打破
钢墙(Steel)  2次打破
河水(River)  子弹可以穿过,坦克不可以
星星(Star)
子弹(Bullet)
3、菜单
添加对象
手动模式
自动模式
4、显示
当前消耗
帮助
二、类设计
1.游戏父类 GameObject
属性:
x,y,width,height,image
方法:
构造函数(初始化)
Draw();
GetRectangle();
2.墙壁父类 WallFather:GameObject
属性:
+life
方法:
构造函数(初始化)
重写Draw();
IsOver();
3.River&Star父类 RSFather:GameObject
方法:
构造函数(初始化)
重写Draw();
4.Bullet :GameObject
属性:
+power
方法:
构造函数(初始化)
重写Draw();
5.Tank:GameObject
属性:

方法:
重写Draw(g);
Move();
Fire();
6.SingleObject
方法:
GetSingle();
Draw();
Check();
三、事件响应


 于是照着这个,一个一个类的实现了。在这个过程中,颇有面向对象的意思在里面,以前写MFC程序的时候感触没这么明显。


1.新建一个VC++ win32 DLL
2.添加头文件"" 在头文件中加入以下代码:
#ifndef DLL_EXPORT
#define DECLDIR __declspec(dllimport)
#else
#define DECLDIR __declspec(dllexport)
#endif
3.添加源程序,添加以下代码:
#define DLL_EXPORT //先定义宏
#include "Dll.h"//这个头文件必须在#define DLL_EXPORT后面
4.编写自己需要的函数:
extern "C"
{
	DECLDIR 返回值 函数名(参数...)
	{
	
	}
}
5.添加必要的头文件,不需要main函数,编译即可
6.建立一个C#工程,将生成的Dll文件(在Debug目录下)扔到C#工程Bin
目录下。
7.在C#中添加如下代码:
(1). 命名空间
using System.Runtime.InteropServices; 
(2).声明
 [DllImport("CppDll.dll", SetLastError = true)]
 private static extern 返回值 函数名(参数...);
 8.然后这个函数就可以直接在C#工程中使用了


这期间,特别要注意的是C++和C#之间数据类型的对应关系!! 这里着实费了一番功夫。
附上C++与C#数据类型对照表:
C++            C#
=====================================
WORD            ushort
DWORD            uint
UCHAR            int/byte   大部分情况都可以使用int代替,而如果需要严格对齐的话则应该用bytebyte 
UCHAR*            string
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值