c++项目开发——吃豆子游戏
游戏介绍:
该游戏总共有3关,每一关里有一个玩家和四个敌人,控制玩家的前进方向躲避敌人以及吃掉所有豆子,每一关的地图是不一样的,有一个隐藏按键可以一键通关。
功能结构图:
流程图:
开发环境:
win7、vs2015
创建项目:
1、新建一个win32项目叫做dou
2、在stdafx.h中加入所需库文件:memeory、vector、algorithm、functional(在dou.h中有#include"stdafx.h",所以可以使用里面的库文件)
3、改变窗口大小:首先在dou.h的前面加上#define WLENGTH 700 //窗口宽度
#define WHEIGHT 740 //窗口高度
将 hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);中的参数改成
hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0, WLENGTH, WHEIGHT, nullptr, nullptr, hInstance, nullptr);(这两个参数表示窗口长宽)
4、修改dou.h中主消息循环部分函数,使程序可以实时更新画面(通用的一个方法)
定义一个变量bool bRunning = true;使其作为while循环的条件,使用PeekMessage函数
while (bRunning)
{
if(PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)){
if (msg.message == WM_QUIT) { //退出时停止循环
break;
}
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
5、画点
windows提供了GDI库来进行画图。Windows 程序在屏幕、打印机或其它设备上画图时,它并不是将像素直接输出到设备上,而是将图绘制到由设备描述表表示的逻辑意义上的"显示平面"上去。设备描述表(DC)是Windows中的一种数据结构,它包含GDI需要的所有关于显示界面情况的描述字段,包括相连的物理设备和各种各样的状态信息。在Windows画图之前,Windows程序从GDI获取设备描述表句柄(HDC),并在每次调用完GDI输出函数后将句柄返回给GDI。
HDC hdc = ::GetDC(g_hwnd); //取得hWnd窗口的设备描述表句柄,参数为NULL时,取得整个屏幕的设备描述表句柄。
int x = rand()%WLENGTH; //取余使得随机数的范围为[0,宽)
int y = rand()%WHEIGHT;
SetPixel(hdc, x, y, RGB(rand()%255, rand() % 255, rand() % 255));//该函数将指定坐标处的像素设为指定的颜色
::DeleteDC(hdc);
6、画线
HDC hdc = ::GetDC(g_hwnd);
HPEN hpen = CreatePen(PS_SOLID, 3, RGB(255, 0, 0)); //画笔默认黑色(画出的线为黑色),指定的样式、宽度和颜色创建画笔,PS_SOLID表示实线
HPEN hOldPen = (HPEN)SelectObject(hdc, hpen);/*选中画笔,该函数有返回值但类型不是HPEN,要强制转换
该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象
返回值是被取代的对象的句柄*/
int x = 100;
int y = 105;
int xx = 200;
int yy = 300;
MoveToEx(hdc, x, y, NULL);/*将当前绘图位置移动到某个具体的点,同时也可获得之前位置的坐标
最后一个参数存放上一个点的位置,若为NULL,则不保存上一个点的位置*/
LineTo(hdc, xx, yy);//用当前画笔画一条线,从当前位置连到一个指定的点
SelectObject(hdc, hOldPen); //恢复成原来的画笔
DeleteObject(hpen);//删除画笔
ReleaseDC(g_hwnd, hdc);
6、画矩形
HDC hdc = ::GetDC(g_hwnd);
//空心矩形用画笔
HPEN hpen = CreatePen(PS_SOLID, 3, RGB(rand() % 255, rand() % 255, rand() % 255));
HPEN hOldPen = (HPEN)SelectObject(hdc, hpen);
Rectangle(hdc, 100, 200, 300, 500);//左上角坐标为(100,200),右下角坐标为(300,500);
SelectObject(hdc, hOldPen);
DeleteObject(hpen);
//实心矩形用画刷
HBRUSH hbrush = CreateSolidBrush(RGB(0, 0, 255));
RECT rect; //创建矩形对象,左上角的横坐标、纵坐标以及矩形的宽度、高度均为零
rect.left = 50;
rect.right = 150;
rect.top = 270;
rect.bottom = 370;
FillRect(hdc, &rect, hbrush); //用指定的画刷填充矩形,包括矩形的左上边界,但不包括矩形的右下边界
//第二个参数为指针
DeleteObject(hbrush);
ReleaseDC(g_hwnd, hdc);
7、画圆、弧形
HDC hdc = ::GetDC(g_hwnd);
Ellipse(hdc, 200, 150, 300, 250); //画圆,后四个参数左上右下是正方形就是圆,矩形是椭圆
Arc(hdc, 100, 100, 200, 300, 150, 200, 100, 200); //画弧形,左上右下起始点,结束点
ReleaseDC(g_hwnd, hdc);
8、玩家形象绘制(张嘴,半张嘴,闭嘴三种)
void Draw0() { //闭嘴的玩家
int x = 300, y = 300; //圆心
int r = 100; //半径
HDC hdc = ::GetDC(g_hwnd);
Ellipse(hdc, x - r, y - r, x + r, y + r);
MoveToEx(hdc, x - r, y, NULL);
LineTo(hdc, x, y);
ReleaseDC(g_hwnd, hdc);
}
#define PI 3.1415926f
void Draw1() { //半张嘴的玩家
int x = 300, y = 300; //圆心
int r = 100; //半径
int x0, y0, x1, y1;
x0 = x - (r*sin(PI*0.75f));
y0 = y + (r*cos(PI*0.75f));
x1 = x + (r*sin(PI*1.25f));
y1 = y - (r*cos(PI*1.25f));
HDC hdc = ::GetDC(g_hwnd);
Arc(hdc, x - r, y - r, x + r, y + r, x1, y1, x0, y0);
MoveToEx(hdc,x0,y0, NULL);
LineTo(hdc, x, y);
MoveToEx(hdc, x1, y1, NULL);
LineTo(hdc, x, y);
ReleaseDC(g_hwnd, hdc);
}
void Draw2() { //张嘴的玩家
int x = 300, y = 300; //圆心
int r = 100; //半径
HDC hdc = ::GetDC(g_hwnd);
Arc(hdc, x - r, y - r, x + r, y + r, x, y+r, x, y-r);
MoveToEx(hdc, x, y-r, NULL);
LineTo(hdc, x, y+r);
ReleaseDC(g_hwnd, hdc);
}
在消息循环里调用这些函数
static DWORD dwTime = GetTickCount(); //电脑从开机到现在的毫秒数
if (GetTickCount() - dwTime >= 40) {
dwTime = GetTickCount();
}
else
continue;
//每个动作之后都清空屏幕,防止重合在一起
HDC hdc = GetDC(g_hwnd);
RECT rc;
GetClientRect(g_hwnd, &rc);//获取窗口客户区的大小,窗口的客户区为窗口中除标题栏、菜单栏之外
HBRUSH hbr = CreateSolidBrush(RGB(255, 255, 255));
FillRect(hdc, &rc, hbr);
DeleteObject(hbr);
ReleaseDC(g_hwnd, hdc);
//闭嘴,半张嘴,全张嘴,半张嘴,闭嘴的顺序循环
static int iFrame = 0;//加了static只有一次初始化,即使重新进入循环也不会重新初始化
iFrame++;
if (iFrame >= 5) {
iFrame = 0;
}
switch (iFrame) {
case 0: {
Draw0();
break;
}
case 1: {
Draw1();
break;
}
case 2: {
Draw2();
break;
}
case 3: {
Draw1();
break;
}
case 4: {
Draw0();
break;
}
default:
break;
}
c++项目开发——吃豆子游戏相关推荐
- C++项目实战(二)——简化版 “吃豆子游戏---pacman” 实现
本项目通过使用 windows 窗口应用程序 实现一个简化版的 吃豆子游戏,主要涉及的知识点包含有:面向对象编程思想.windows 消息循环的工作原理.windows 窗口应用程序实现.父类与子类的 ...
- 基于JavaSwing开发吃豆子小游戏 课程设计 大作业源码
基于JavaSwing开发吃豆子小游戏: (大作业) 开发环境: Windows操作系统 开发工具: MyEclipse/Eclipse/idea+Jdk 运行效果图: 基于JavaSwing开发 ...
- 吃豆豆游戏的C语言程序码,C++实现基于控制台界面的吃豆子游戏
本文实例讲述了C++实现基于控制台界面的吃豆子游戏.分享给大家供大家参考.具体分析如下: 程序运行界面如下所示: ESC键可退出游戏. main.cpp源文件如下: #include "li ...
- java游戏演示ppt_java项目开发实战──五子棋游戏.ppt
java项目开发实战──五子棋游戏.ppt 还剩 23页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: 第 24 ...
- 厉害的程序员都有吊炸天的实力,C++实现吃豆子游戏!
作为"全世界卖得最多的街机游戏","吃豆人"大家再熟悉不过了.但它是"现代游戏AI鼻祖"这件事,恐怕知道的人不多. 这篇文章主要介绍了C++ ...
- c#吃豆子游戏,模仿百度在线应用吃豆子
这是一款模仿百度在线吃豆子的应用,本人对于C#小游戏制作的理解不是很深.CSDN里面用c#做的吃豆子也实在是太少,有的也太过于简单,于是萌生了一个念头,做一款C#吃豆子游戏,希望互相学习. csdn下 ...
- C++小项目-吃豆子游戏
GMap.h #pragma once //保证头文件只被编译一次#include "stdafx.h"#define MAP_LEN 19 //逻辑地图大小 (逻辑地图由行.列各 ...
- 点赞!盲人程序员独立开发吃鸡游戏,眼睛看不到,心却明亮
黑马程序员视频库 播妞QQ号:3077485083 传智播客旗下互联网资讯.学习资源免费分享平台 在常人的观念里,可能很难把盲人和程序员这两类人群联想到一起.很多人对盲人的刻板印象,不是"做 ...
- 项目开发-疯狂连连看游戏开发
疯狂连连看游戏开发 游戏简介:疯狂连连看,是一款简单易玩的手机休闲游戏,界面布局简单,玩法简单,适合广大年龄层的用户进行休闲.放松.该游戏,应用于Android手机操作系统,Android1.6以上. ...
- 用Java写吃豆子游戏的论文_java swing开发简单的大鱼吃豆子小游戏,可用于毕业设计(附详细设计文档)...
/** * @(#)main.BigMonthFishFrame.java 2008-7-31 * Copy Right Information: Tarena * Project: main * J ...
最新文章
- 【青少年编程】黄羽恒:翻译小工具 -- 利用百度翻译
- 在windows下使用llvm+clang
- 两年摸爬滚打 Spring Boot,总结了这 16 条最佳实践
- LeetCode 357. 计算各个位数不同的数字个数(动态规划)
- Python 对象的绑定方法
- linux一个数据页多少,复习——Linux
- 什么软件可以压缩图片大小?这几个软件值得收藏
- 使用Phoenix连接HBASE,squirrel使用,代码连接使用Phoenix
- 软件license授权加、解密,软件注册工具(2)
- 小议Linux安全防护(一)
- VS插件——番茄助手快捷键的使用教程
- 客户端负载均衡Ribbon
- vue下拉el-select二级联动
- win7 关闭防火墙
- Compose学习笔记1-compose、state、flow、remember
- web网络知识(一)公网IP、内网IP
- 4000GB、数百亿条个人信息泄露!大数据行业知名企业数据堂被查
- 一文看懂苹果秋季新品发布会:iPhone 13领衔C位产品齐了
- 剑客之剑——君子剑(Notepad++)
- TiUP Cluster