游戏介绍:

该游戏总共有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++项目开发——吃豆子游戏相关推荐

  1. C++项目实战(二)——简化版 “吃豆子游戏---pacman” 实现

    本项目通过使用 windows 窗口应用程序 实现一个简化版的 吃豆子游戏,主要涉及的知识点包含有:面向对象编程思想.windows 消息循环的工作原理.windows 窗口应用程序实现.父类与子类的 ...

  2. 基于JavaSwing开发吃豆子小游戏 课程设计 大作业源码

    基于JavaSwing开发吃豆子小游戏:   (大作业) 开发环境: Windows操作系统 开发工具: MyEclipse/Eclipse/idea+Jdk 运行效果图: 基于JavaSwing开发 ...

  3. 吃豆豆游戏的C语言程序码,C++实现基于控制台界面的吃豆子游戏

    本文实例讲述了C++实现基于控制台界面的吃豆子游戏.分享给大家供大家参考.具体分析如下: 程序运行界面如下所示: ESC键可退出游戏. main.cpp源文件如下: #include "li ...

  4. java游戏演示ppt_java项目开发实战──五子棋游戏.ppt

    java项目开发实战──五子棋游戏.ppt 还剩 23页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: 第 24 ...

  5. 厉害的程序员都有吊炸天的实力,C++实现吃豆子游戏!

    作为"全世界卖得最多的街机游戏","吃豆人"大家再熟悉不过了.但它是"现代游戏AI鼻祖"这件事,恐怕知道的人不多. 这篇文章主要介绍了C++ ...

  6. c#吃豆子游戏,模仿百度在线应用吃豆子

    这是一款模仿百度在线吃豆子的应用,本人对于C#小游戏制作的理解不是很深.CSDN里面用c#做的吃豆子也实在是太少,有的也太过于简单,于是萌生了一个念头,做一款C#吃豆子游戏,希望互相学习. csdn下 ...

  7. C++小项目-吃豆子游戏

    GMap.h #pragma once //保证头文件只被编译一次#include "stdafx.h"#define MAP_LEN 19 //逻辑地图大小 (逻辑地图由行.列各 ...

  8. 点赞!盲人程序员独立开发吃鸡游戏,眼睛看不到,心却明亮

    黑马程序员视频库 播妞QQ号:3077485083 传智播客旗下互联网资讯.学习资源免费分享平台 在常人的观念里,可能很难把盲人和程序员这两类人群联想到一起.很多人对盲人的刻板印象,不是"做 ...

  9. 项目开发-疯狂连连看游戏开发

    疯狂连连看游戏开发 游戏简介:疯狂连连看,是一款简单易玩的手机休闲游戏,界面布局简单,玩法简单,适合广大年龄层的用户进行休闲.放松.该游戏,应用于Android手机操作系统,Android1.6以上. ...

  10. 用Java写吃豆子游戏的论文_java swing开发简单的大鱼吃豆子小游戏,可用于毕业设计(附详细设计文档)...

    /** * @(#)main.BigMonthFishFrame.java 2008-7-31 * Copy Right Information: Tarena * Project: main * J ...

最新文章

  1. 【青少年编程】黄羽恒:翻译小工具 -- 利用百度翻译
  2. 在windows下使用llvm+clang
  3. 两年摸爬滚打 Spring Boot,总结了这 16 条最佳实践
  4. LeetCode 357. 计算各个位数不同的数字个数(动态规划)
  5. Python 对象的绑定方法
  6. linux一个数据页多少,复习——Linux
  7. 什么软件可以压缩图片大小?这几个软件值得收藏
  8. 使用Phoenix连接HBASE,squirrel使用,代码连接使用Phoenix
  9. 软件license授权加、解密,软件注册工具(2)
  10. 小议Linux安全防护(一)
  11. VS插件——番茄助手快捷键的使用教程
  12. 客户端负载均衡Ribbon
  13. vue下拉el-select二级联动
  14. win7 关闭防火墙
  15. Compose学习笔记1-compose、state、flow、remember
  16. web网络知识(一)公网IP、内网IP
  17. 4000GB、数百亿条个人信息泄露!大数据行业知名企业数据堂被查
  18. 一文看懂苹果秋季新品发布会:iPhone 13领衔C位产品齐了
  19. 剑客之剑——君子剑(Notepad++)
  20. TiUP Cluster

热门文章

  1. windows下安装ruby(一)
  2. (NCRE网络技术)IP地址规划设计技术-知识点
  3. 从苹果供应商看2018年全球电子产业链的中国势力变化
  4. LabVIEW的VISA函数串口数据采集例子——温度采集系统
  5. FFmpeg如何设置编码器私有参数
  6. delphi 剪切板变量_Delphi监视剪贴板内容
  7. html的个人简历边框,怎样制作简历模板边框
  8. 腾讯内部出品Android编程入门教程,快快收藏吧!!!
  9. ASP:Panel控件(容器控件)
  10. 超大箱船面临改变 投入福州到泉州专线