c# 游戏设计:地图移动
想实现一个小游戏,先做地图移动。步骤记录如下:
1、百度到一张大的迷宫地图,放在项目的debug目录下,备用。
2、创建一个winform项目,不添加任何界面元素。
3、添加数据成员如下:
PictureBox pictureBox1;
Bitmap myBitmap;
Bitmap currBitmap;
Point mypoint;
分别用于显示图片、存储地图,存储界面上的地图,界面上的地图显示的左上角坐标。
4、设置窗体启动后最大化
public Form1()
{
InitializeComponent();
this.WindowState = FormWindowState.Maximized;
}
5、窗口启动后添加图片和做其他各种预备工作。
private void Form1_Shown(object sender, EventArgs e)
{
this.MaximumSize = this.Size;
this.MinimumSize = this.Size;
pictureBox1 = new PictureBox();
pictureBox1.Location = new System.Drawing.Point(0, 0);
pictureBox1.Size = this.Size;
this.Controls.Add(pictureBox1); myBitmap = new Bitmap("map.jpeg");
currBitmap = new Bitmap(this.Size.Width, this.Size.Height);
pictureBox1.Image = currBitmap;
mypoint = new Point(0, 0);
var g = Graphics.FromImage(pictureBox1.Image);
g.DrawImage(myBitmap, mypoint);
}
6、处理asdw按键按下消息,让地图可以移动。
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
var key = e.KeyValue;
var g = Graphics.FromImage(pictureBox1.Image);
if (key >= 'a' && key <= 'z') key -= ('a' - 'A');
switch(key)
{
case 'A':
mypoint.X -= 10;
if (mypoint.X + myBitmap.Size.Width <currBitmap.Size.Width) mypoint.X = currBitmap.Size.Width-myBitmap.Size.Width;
break;
case 'D':
mypoint.X += 10;
if (mypoint.X>0) mypoint.X = 0;
break;
case 'W':
mypoint.Y -= 10;
if (mypoint.Y + myBitmap.Size.Height < currBitmap.Size.Height) mypoint.Y = currBitmap.Size.Height - myBitmap.Size.Height;
break;
case 'S':
mypoint.Y += 10;
if (mypoint.Y>0) mypoint.Y = 0;
break;
default: break;
}
g.DrawImage(myBitmap, mypoint);
pictureBox1.Refresh();
}
完毕。
显示效果如下:

下一步找一些小人加上去。
c# 游戏设计:地图移动的更多相关文章
- Silverlight游戏设计(Game Design):(十四)练习用游戏素材资源的获取及相关工具使用心得 --转
Silverlight游戏设计(Game Design):(十四)练习用游戏素材资源的获取及相关工具使用心得 通过前6节的Demo制作演示,大家应该已经相当熟悉这款Silverlight-2D游戏场景 ...
- MMORPG大型游戏设计与开发(客户端架构 part8 of vegine)
脚本模块是游戏设计中争论比较多的话题,那是因为作为脚本本身所带来的利弊.其实这都无关紧要,取舍是人必须学会的一项技能,如果你不会取舍那么就让趋势给你一个满意的答复.自从魔兽世界以及传奇(世界)问世以来 ...
- MMORPG大型游戏设计与开发(概述)updated
1.定义 MMORPG,是英文Massive(或Massively)Multiplayer Online Role-PlayingGame的缩写,即大型多人在线角色扮演游戏. 2.技术与知识 在这系列 ...
- 信息安全系统设计基础课程实践:简单TUI游戏设计
简单TUI游戏设计 目 录 一 Curses库简介与基本开发方法 ...
- 【Stage3D学习笔记续】山寨Starling(十):高效游戏设计、纹理集和ATF
我发布了经过批处理优化的v0.3版,点击下载:https://github.com/hammerc/hammerc-study-Stage3D/archive/v0.3.zip 先看看我们批处理优化后 ...
- Roguelike元素对游戏设计的影响
Roguelike game自1980年以来,就占据着游戏市场中很大的份额,而现如今的很多游戏中,也加入了Roguelike元素来起到更好的效果.我们知道Roguelike game中有着一些看似任性 ...
- <发条游戏设计>粗翻——第一部分 理论(一)
段落1 游戏 游戏设计定义 相对而言,游戏设计是一个新的学科,专业的作曲家.画家.作家.建筑师已经至少存在了500多年,然而游戏设计师只在最近50年才被特分出来单作一类.然而这个类别仅仅在最近20-2 ...
- <发条游戏设计>粗翻——序言、
序言——————————————————————— 优雅 就像在英语里的很多单词一样,“优雅”有着一些不同意义的解释.一些习惯性的用法常常带有“美”的意思:例如“她穿着一条优雅的裙子”,代表着一种完全 ...
- Unity游戏设计与实现 南梦宫一线程序员的开发实例
图灵程序设计丛书 Unity游戏设计与实现:南梦宫一线程序员的开发实例(修订版) 加藤政树 (作者) 罗水东 (译者) c# 游戏 unity <内容提要>本书的作者是日本知 ...
- Cocos文档案例游戏设计的梳理与分析
导语:这是一篇新手教程,适用于已看完Cocos官方文档,但还对游戏设计.运行流程不熟悉的新人.这篇教程是对文档[快速上手]里那款名叫"摘星星"的坑爹小游戏(文档原话)流程的梳理,以 ...
随机推荐
- Mqttnet内存与性能改进录
1 MQTTnet介绍 MQTTnet是一个高性能的 .NET MQTT库,它提供MQTT客户端和MQTT服务器的功能,支持到最新MQTT5协议版本,支持.Net Framework4.5.2版本或以 ...
- Linux基础守护进程、高级IO、进程间通信
守护进程(Daemon) 前言 Linux常用于服务器,程序通常不运行在前台.运行于前台的进程和终端关联,一旦终端关闭,进程也随之退出.因为守护进程不和终端关联,因此它的标准输出和标准输入也无法工作, ...
- python画社交网络图
安装依赖包 pip3 install networkx 在图书馆的检索系统中,关于图书的信息里面有一个是图书相关借阅关系图.跟这个社交网络图是一样的,反映了不同对象间的关联性.利用python画社交网 ...
- 关于 MySQL 嵌套子查询中,无法关联主表字段问题的折中解决方法
今天在工作中写项目的时候,遇到了一个让我感到几乎无解的问题,在转换了思路后,想出了一个折中的解决方案,记录如下. 其实,问题的场景,非常简单: 就是需要查询出上图的数据,红框是从 项目产品表 中查询的 ...
- [python]《Python编程快速上手:让繁琐工作自动化》学习笔记7
1. 用GUI 自动化控制键盘和鼠标第18章 (代码下载) pyautogui模块可以向Windows.OS X 和Linux 发送虚拟按键和鼠标点击.根据使用的操作系统,在安装pyautogui之前 ...
- [编程基础] C++多线程入门5-使用互斥锁解决资源竞争
原始C++标准仅支持单线程编程.新的C++标准(称为C++11或C++0x)于2011年发布.在C++11中,引入了新的线程库.因此运行本文程序需要C++至少符合C++11标准. 文章目录 5 使用互 ...
- 用python爬取网络文章----滴天髓
用python爬取网络文章真的很简单.主要分以下几个步骤 1.安装并导入相关模块. 这里我们要用到两个模块,分别是reqesets和lxml 安装命令pip install requests和pip ...
- Java学习笔记 :2021年12月31日 上午
Java学习笔记 :2021年12月31日 上午 目录 Java学习笔记 :2021年12月31日 上午 关于计算机语言 1.关于语言的分类 2.小结 关于Java语言的基础语法 1.主方法 2.其他 ...
- 用Java写一个分布式缓存——缓存淘汰算法
前言 之前也用过一些缓存中间件,框架,也想着自己是不是也能用Java写一个出来,于是就有了这个想法,打算在写的过程中同步进行总结. 源码:weloe/Java-Distributed-Cache (g ...
- 题解 CF1579G Minimal Coverage
CF1579G Minimal Coverage dp好题! link to the problem 解法 首先需要观察到:如果最长线段的长度为\(maxL\),那么答案不可能超过\(2maxL\) ...