这个只要安装了easyx图形库就可以直接复制运行。
easyx的安装可以参考这个:
easyx的安装与基于easyx的C语言扫雷小游戏_makabaka12138的博客-CSDN博客
这个游戏也比较粗糙,只做了个大概,有感兴趣的可以自己改进一下。
喜欢的点个赞吧。
展示:
#include#include #include //easyX 库 #include //砖块宽 #define ZK_WIDTH 120 //砖块高 #define ZK_HEIGHT 40 //行数 #define ZK_ROWS 4 //列数 #define ZK_COLS 5 //宽 60 高 20 //窗口高 #define WINDOW_HEIGHT 600 //窗口宽 #define WINDOW_WIDTH (ZK_WIDTH*ZK_COLS) //球的半径 #define RADIUS 10 //板子宽 #define BZ_WIDTH 300 //板子高 #define BZ_HEIGHT 20 //全局变量 0 false 存在 1 true 不存在 bool zk[ZK_ROWS][ZK_COLS] = { 0 }; //球的圆心坐标 int ball_x, ball_y; //板子左上角那个点的坐标 int bz_x, bz_y; //球的方向向量 3 右 -3 左 -3上 3下 int ball_xfx=3, ball_yfx=-3; //游戏是否继续 bool isContinue = true; //画板子 void drawBZ(); //画球 void drawBall(); //打印一块砖 // x y 下标 void drawZK(int x, int y); //显示所有的砖 void drawAllZK(); //游戏的所有显示 void drawGame(); //球移动 void ballMove(); //碰撞检测 void check(); //控制 是否按键 根据按键来处理 void ctolGame(); int main(){ initgraph(WINDOW_WIDTH, WINDOW_HEIGHT); //板子的初始坐标 bz_x = (WINDOW_WIDTH - BZ_WIDTH) / 2; bz_y = WINDOW_HEIGHT - BZ_HEIGHT; //球心初始坐标 ball_x = WINDOW_WIDTH / 2; ball_y = WINDOW_HEIGHT - BZ_HEIGHT - RADIUS; while (isContinue){ drawGame(); ballMove(); ctolGame(); Sleep(10);//帧率100 1秒钟图片切换张数 16以上 100以下 } settextcolor(RED); LOGFONT font = { 0 }; font.lfHeight = 40; font.lfWidth = 20; settextstyle(&font); outtextxy(WINDOW_WIDTH / 2 - 100, WINDOW_HEIGHT / 2, L"Game Over!!!"); while (1); return 0; } //球移动 void ballMove(){ ball_x += ball_xfx; ball_y += ball_yfx; } //碰撞检测 void check(){ //检测球是否撞上右边沿 if ((ball_xfx > 0) && //球往右边走 (ball_x >= (WINDOW_WIDTH - RADIUS))){//撞上了右边沿 ball_xfx = -3; } //检测球是否撞上左边沿 if ((ball_xfx < 0) && //球往左边走 (ball_x <= RADIUS)){//撞上了左边沿 ball_xfx = 3; } //检测球是否撞上上边沿 if ((ball_yfx < 0) && //球往上边走 (ball_y <= RADIUS)){//撞上了上边沿 ball_yfx = 3; } //检测球是否撞上下边沿 if ((ball_yfx > 0) && //球往下边走 (ball_y >= (WINDOW_HEIGHT-RADIUS) )){//撞上了下边沿 //ball_yfx = -3; isContinue = false; } //检测球是否撞上板子 if ((ball_yfx > 0) && (ball_y >= (bz_y - RADIUS)) &&//球y坐标 (ball_x >= bz_x) && (ball_x <= (bz_x + BZ_WIDTH))){ ball_yfx = -3; } //检测撞砖块 for (int i = 0; i < ZK_ROWS; i++){ for (int j = 0; j < ZK_COLS; j++){ // zk[i][j] x:j*ZK_WIDTH y:i*ZK_HEIGHT //左上角坐标 (j*ZK_WIDTH,i*ZK_HEIGHT) //右下角坐标(j*ZK_WIDTH+ZK_WIDTH,i*ZK_HEIGHT+ZK_HEIGHT) if (3 == ball_xfx){//检测从左往右撞 } if (-3 == ball_xfx){//检测从右往左撞 } if (-3 == ball_yfx){//检测从下往上撞 if ((false == zk[i][j]) //砖块存在 && (ball_x > j*ZK_WIDTH) //左边边界 && (ball_x < (j*ZK_WIDTH + ZK_WIDTH))//右边边界 && (ball_y < (i*ZK_HEIGHT + ZK_HEIGHT + RADIUS))//上边边界 ){ zk[i][j] = true;//把砖块打掉 ball_yfx = 3; } } if (3 == ball_yfx){//检测从上往下撞 } } } } //控制 是否按键 根据按键来处理 void ctolGame(){ check();//不管有没有按键,都要碰撞检测 int ch; if (true == _kbhit()){//检测是否有按键 ch = _getch();//获取按键的值 printf("ch:%dn", ch); switch (ch){ case 'a': case 'A': case 75: bz_x -= 5; break; case 'd': case 'D': case 77: bz_x += 5; break; } } } //游戏的所有显示 void drawGame(){ BeginBatchDraw();//绘图前 防闪 //清屏 cleardevice(); drawAllZK(); drawBZ(); drawBall(); EndBatchDraw();//绘图后 防闪 } //打印一块砖 // x y 下标 void drawZK(int x, int y){ if (0 == zk[y][x]){ setlinecolor(RED); setfillcolor(GREEN); fillrectangle(x * ZK_WIDTH, y * ZK_HEIGHT, x * ZK_WIDTH + ZK_WIDTH, y * ZK_HEIGHT + ZK_HEIGHT); } } //显示所有的砖 void drawAllZK(){ for (int i = 0; i < ZK_ROWS; i++){//5行 for (int j = 0; j < ZK_COLS; j++){//30列 //if (0 == zk[i][j]) drawZK(j, i); } } } //画板子 void drawBZ(){ setlinecolor(YELLOW); setfillcolor(YELLOW); fillrectangle(bz_x, bz_y, bz_x + BZ_WIDTH, bz_y + BZ_HEIGHT); } //画球 void drawBall(){ setlinecolor(BLUE); setfillcolor(RED); fillcircle(ball_x, ball_y, RADIUS); }



