C语言实现图形化打砖块游戏

本文实例为大家分享了C语言实现图形化打砖块游戏的具体代码,供大家参考,具体内容如下

#include<stdio.h> 
#include<conio.h>
#include<easyx.h>
#include<Windows.h>
#define WINDOW_Width  768
#define WINDOW_Height 1073 
#define BrickWidth 81
#define BrickHeight 27
#define ROWS 5     //行
#define COLS 8     //列
enum bk { null, red, orange, yellow, green, blue };
#define Broad_Width 110
#define Broad_Height 20
int brick[ROWS][COLS] = { 0 };
IMAGE img[6], img_ball[2]; IMAGE img_bk, img_board;
 
int Ball_x = 6; //球的x方向向量   
int Ball_y = -6;//球的y方向向量  
#define Radius 5
int Broad_x = (WINDOW_Width - Broad_Width) / 2 +25; //Broad初始化
int Broad_y = WINDOW_Height - Broad_Height-100;
 
int circle_x = WINDOW_Width / 2-16;               //circle初始化
int circle_y = WINDOW_Height - Radius - Broad_Height-122 ;
void loadRescource()
{
    loadimage(img + 1, "./res/redblock.png",78,25);
    loadimage(img + 2, "./res/orangeblock.png",78,25);
    loadimage(img + 3, "./res/yellowblock.png",78,25);
    loadimage(img + 4, "./res/greenblock.png",78,25);
    loadimage(img + 5, "./res/blueblock.png",78,25);
 
    loadimage(&img_bk, "./res/bk.png");
 
    loadimage(img_ball + 0, "./res/ball0.png");
    loadimage(img_ball + 1, "./res/ball.png");
 
    loadimage(&img_board, "./res/board.png");
 
}
void drawBall()
{
    putimage(circle_x, circle_y, &img_ball[0]);
    putimage(circle_x, circle_y, &img_ball[1]);
 
}
 
 
void ballMove()
{
    circle_x += Ball_x;
    circle_y += Ball_y;
 
}
int  DisappearBrick()
{
    int ZK_COL =( circle_x-60) / BrickWidth;
    int ZK_ROW = (circle_y-250) / BrickHeight;
 
    if (ZK_ROW < 5 && ZK_COL < 8 && brick[ZK_ROW][ZK_COL] != -1)
    {
        brick[ZK_ROW][ZK_COL] = -1;
        return 1;
 
    }return 0;
}
//碰撞检测int circle_x, int circle_y
void CollisionDetection()
{
    //球如果往右边移动,检测球是否撞上右边沿
    if (Ball_x > 0 && circle_x >= WINDOW_Width - Radius-55)
    {
        Ball_x = -6;
    }
    //球如果往上边移动,检测球是否撞上上边沿
    if (Ball_y < 0 && circle_y <= Radius || DisappearBrick())
    {
        Ball_y = 6;
    }
    //球如果往左边移动,检测球是否撞上左边沿
    if (Ball_x < 0 && circle_x <= Radius +35)
    {
        Ball_x = 6;
    }
    //球如果往下边移动,检测球是否撞上下边沿
    if (Ball_y > 0 && circle_y >= WINDOW_Height - Radius)
    {
        Ball_y = 0;
        Ball_x = 0;
 
    }
    //检测球是否撞上板子,只能从上往下撞,只有两种极限情况
    if ((Ball_y > 0) && (circle_y >= (Broad_y - Radius) - 25) &&//球y坐标
        (circle_x >= Broad_x) && (circle_x <= (Broad_x + Broad_Width)))
    {
        Ball_y = -6;
    }
 
}
//键盘控制
void KeyControl()
{
    CollisionDetection();    //不管有没有按键都要碰撞检测
    int ch;
    if (true == _kbhit())
    {                       //检测是否有按键
        ch = _getch();//获取按键的值
        switch (ch)
        {
        case 'a':
        case 'A':
        case 75:
            if(Broad_x >= Radius + 35+38)
            Broad_x -= 50;
            break;
        case 'd':
        case 'D':
        case 77:
            if (Broad_x <= WINDOW_Width - Radius - 55-149)
            Broad_x += 50;
            break;
        }
    }
}
void DrawAllBrick()
{
    for (int i = 0; i < ROWS; i++)
    {
        for (int j = 0; j < COLS; j++)
            switch (brick[i][j])
            {
            case 1:
                putimage(j * 81 + 60, i * 27 + 250, &img[1]);
                break;
            case 2:
                putimage(j * 81 + 60, i * 27 + 250, &img[2]);
                break;
            case 3:
                putimage(j * 81 + 60, i * 27 + 250, &img[3]);
                break;
            case 4:
                putimage(j * 81 + 60, i * 27 + 250, &img[4]);
                break;
            case 5:
                putimage(j * 81 + 60, i * 27 + 250, &img[5]);
            }
    }
 
}
void init(int  brick[][COLS])
{
    int k = 1;
    for (int i = 0; i < ROWS; i++)
    {
 
        for (int j = 0; j < COLS; j++)
        {
 
            brick[i][j] = k;
 
        }
        k++;
    }
 
}
 
int main()
{
    initgraph(WINDOW_Width, WINDOW_Height/*,EW_SHOWCONSOLE*/);
    init(brick);
    loadRescource();
 
    while (true)
    {
        BeginBatchDraw();
 
        putimage(0, 0, &img_bk);
 
        putimage(Broad_x, Broad_y, &img_board);
 
        DrawAllBrick();
 
        drawBall();
        ballMove();
        KeyControl();
        DisappearBrick();
 
        EndBatchDraw();
        Sleep(20);
    }
    while (1);
    return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言 小游戏打砖块实现流程详解

    始祖是美国英宝格公司(en:Atari Games,ja:アタリ (ゲーム))于1976年推出的街机游戏"Breakout"(en:Breakout),由该公司在1972年发行的"PONG"(en:PONG,ja:ポン (ゲーム),世界上第一款电子游戏,类似台球)改良而来.相较于其前作,一个人就可以玩与变化丰富这两项特点让Breakout相当卖座,使各家公司竞相模仿. 因为规则简单与游戏性,现在许多移动电话都有内建打砖块游戏,也有许多因特网小游戏版本,目前在网上可以

  • C语言数组实现打砖块游戏

    本文实例为大家分享了C语言数组实现打砖块游戏的具体代码,供大家参考,具体内容如下 这次我们使用数组来改进打砖块游戏. 反弹的球 首先我们实现一个可以在荧幕上反弹的小球.使用二维数组 int canvas[High][Width] ( 和js的canvas没有一毛钱关系)来储存画布上的所有元素,值为0时输出空格,值为1时输出小球. 设小球坐标为(ball_x, ball_y),则有canvas[ball_x][ball_y] = 1 ,且暂时将其他元素的值设为0. 每次更新小球位置时将原位置元素设

  • C语言实现打砖块游戏

    本文实例为大家分享了C语言实现打砖块游戏的具体代码,供大家参考,具体内容如下 代码: #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<Windows.h> int score; int ball_row, ball_col; int ball_vv, ball_vh; int area_height, area_width; int baffle_col, baffle_row,

  • C语言实现打砖块小游戏

    本文实例为大家分享了C语言实现打砖块游戏的具体代码,供大家参考,具体内容如下 本节我们将沿用 上一节 所提到的函数式游戏框架来写一个弹球打砖块的游戏. 基本量.边框绘制 我们首先定义好可能需要的变量,比如小球坐标以及速度.游戏界面高度和宽度等等,然后再根据之前提到的弹跳小球重构代码,剩下的内容再分步添置即可. #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <cwindow.h&

  • C语言控制台打砖块小游戏

    本文为大家分享了C语言控制台小游戏,打砖块,供大家参考,具体内容如下 这个问题是我在领扣上面看到的一道困难问题,原题是这样的: #include "stdafx.h" #include<stdio.h> int a[10][10] = { { 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 },                    { 0, 0, 1, 1, 1, 1, 0, 1, 1, 0 },                   { 0, 0, 0, 0,

  • C语言实现图形化打砖块游戏

    本文实例为大家分享了C语言实现图形化打砖块游戏的具体代码,供大家参考,具体内容如下 #include<stdio.h>  #include<conio.h> #include<easyx.h> #include<Windows.h> #define WINDOW_Width  768 #define WINDOW_Height 1073  #define BrickWidth 81 #define BrickHeight 27 #define ROWS 5

  • Mysql下载安装、部署与图形化详细操作教程

    Mysql是一个必须学会如何安装与部署的工具,它不同于其它那些傻瓜式的应用/程序,一键到底,如果是初次在Windows下安装Mysql的初学者还是有一定难度的. 本文配合之前的<Javaweb开发环境Myeclipse6.5 JDK1.6 Tomcat6.0 SVN1.8配置教程>(点击打开链接)一文中的前台开发环境的部署,也就形成了JavaWeb.JSP.J2EE的基本开发环境. 一.Mysql的下载 首先打开Mysql的官网(点击打开链接),百度一下是搜不到的,我也找了很久才找到Mysql

  • Java图形化界面设计之容器(JFrame)详解

    Java图形化界面设计--容器(JFrame) 程序是为了方便用户使用的,因此实现图形化界面的程序编写是所有编程语言发展的必然趋势,在命令提示符下运行的程序可以让我们了解java程序的基本知识体系结构,现在就进入java图形化界面编程. 一.Java基本类(JFC) Java基本类("JavaFoundationClasses",JFC),由一些软件包组成.这些软件包主要包括下面一些应用程序接口(API): ·抽象窗口工具集(AWT)(1.1及以上版本). ·Swing构件. ·Jav

  • VMware安装Centos8系统的教程图解(中文图形化模式)

    一.软件.系统镜像 软件:VMware 14 镜像:CentOS8 , 镜像官网下载地址 : http://mirror.jdcloud.com/centos/8.0.1905/isos/x86_64/CentOS-8-x86_64-1905-dvd1.iso 桌面模式界面如下(第三部分第11步骤选择:带GUI的服务器或工作站): 二.创建虚拟机 1.打开VMware,选择创建新的虚拟机. 2.选择自定义(高级)(C),下一步. 3.下一步. 4.选择稍 后安装操作系统,下一步. 5.选择 Li

  • Perl图形化包管理工具PPM学习使用笔记

    PPM(Programmer's Package Manager)是ActivePerl自带的一个图形化管理工具,有了这个工具,要升级,更新,移除Perl的Package都非常方便.只需要输入ppm 或者 ppm gui就可以打开图形界面.毕竟用cpanm来安装的话,你也必须知道要安装的模块名,不是很方便,查询起来也麻烦,要上cpan专门的网页去查. 复制代码 代码如下: C:\>ppm 或者 复制代码 代码如下: C:\>ppm gui 横向的菜单说明如下: 可以使用过滤器来筛选: 可以查看

  • C语言实现图的搜索算法示例

    本文实例讲述了C语言实现图的搜索算法.分享给大家供大家参考,具体如下: 在游戏中,常常遇到路径规划问题,用到图的相关算法,我们以简单图来学习. 图通常有两种表示方式,矩阵和邻接表.矩阵表示简单,运算快,但当矩阵是稀疏矩阵的时候就存在空间浪费的问题,并且效率也会下降,而邻接表节约空间,并且由于边是连续访问,时间效率也比较高.在本文中,我们将以邻接表来表示图. #include<queue> #include<stack> using namespace std; struct SE{

  • MYSQL ZIP免安装版配置步骤及图形化管理工具mysql-workbench

    1. 解压ZIP包和配置 首先,将mysql-5.5.25-winx64.zip 解压缩到D:/mysql-5.5.25 目录下,然后根据网上相关资料,将my-large.ini(当然也可以视情况选择别的ini配置文件) 复制后改名为my.ini,在此基础上,主要是在[mysqld]段中添加了: 复制代码 代码如下: #系统基本目录basedir= D:/mysql-5.5.25#用户数据目录datadir= D:/mysql-5.5.25/data#字符集设置character-set-ser

  • Navicat for MySQL(mysql图形化管理工具)是什么?

    MySQL现已经成为大多数中小企业及个人站长建站的首选数据库,其自带了简单web图形管理phpmyadmin工具,但是管理.操作能力有限,这就使得人们常需要寻找一个更为专业,管理功能更为强大的管理工具,以方便于我们更好的应用和管理MySQL数据库. 这里就给大家介绍一个常用的MySQL数据库管理工具:Navicat for MySQL.首先我们介绍一下: Navicat for MySQL是什么? Navicat for MySQL是一款强大的MySQL数据库管理和开发工具,它为专业开发者提供了

  • Linux fedora 24 忘记密码图形化界面修改root密码的方法

    方法及其简单,只需要两步即可: 1.第一步: 打开终端,输入sudo su命令. –此处的密码为普通用户的密码,也就是开机时输入的密码. 2.第二步: 直接sudo passwd root就重置了roor密码了. 此时输入新的密码即可,个人建议密码最好字母加数字相结合. PS:下面看下fedora23忘记root密码怎么修改? 第一步:在开机进入grub菜单的时候选择正确的启动项,按e 第二步:找到开头是linux16这一行,在末尾加上rd.break,注意空格,按ctrl+x 第三步:此时进入

  • C#编程调用Cards.dll实现图形化发牌功能示例

    本文实例讲述了C#编程调用Cards.dll实现图形化发牌功能.分享给大家供大家参考,具体如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices

随机推荐