C语言小插曲——对图形库的初步探索(消除小球小游戏)

简介: C语言小插曲——对图形库的初步探索(消除小球小游戏)

仅用于记录。

代码

#include <graphics.h>
#include <time.h>
#include <stdio.h>
#include <conio.h>
#define ROW 9
#define COL 9
#define SIZE 25
#define EASY 10
#define SPEED 500
int main()
{
  //重新开始游戏
  again:
  int x,y,r = 0,g = 0,b = 0,count = 0,row,col,s = 0;
  int speed = SPEED;
 
  //建立一个用于存放小球的二维数组
  int arr[ROW][COL] = { 0 };
  //随机数
  srand((unsigned int)time(NULL));
 
  //建立窗口
  initgraph(ROW * (2 * SIZE) + 200, COL * (2 * SIZE));
 
  //设定背景颜色
  setbkcolor(WHITE);
  cleardevice();
 
  //初始化小球数组
  for (x = 0; x < ROW; x++)
  {
    for (y = 0; y < COL; y++)
    {
      arr[x][y] = 1;
    }
  }
 
  //建立字符数组,用于后面显示分数
  char ch[5];
 
  //显示游戏基本情况
  settextstyle(16, 0, "新宋体");
  settextcolor(RGB(248, 99, 82));
  outtextxy(ROW * (2 * SIZE) + 10, 50, "通过鼠标点击来消除小球");
  outtextxy(ROW * (2 * SIZE) + 10, 70, "当屏幕中小球达到10个时");
  outtextxy(ROW * (2 * SIZE) + 10, 90, "则游戏结束");
  outtextxy(ROW * (2 * SIZE) + 10, 110, "难度:普通");
  outtextxy(ROW * (2 * SIZE) + 10, 130, "按下空格键开始游戏");
  setlinecolor(BROWN);
  rectangle(1, 1, ROW * (2 * SIZE)-1, COL * (2 * SIZE)- 1);
 
  //键盘操作开始游戏
  char key = 0;
  key = _getch();
  while (1)
  {
    switch (key)
    {
    case 32:
            while (count < EASY)
      {
        for (row = 0; row < ROW; row++)
        {
          for (col = 0; col < COL; col++)
          {
            //使小球获得随机颜色
            r = rand() % 255 + 20;
            g = rand() % 255 + 20;
            b = rand() % 255 + 20;
            x = rand() % ROW;
            setfillcolor(RGB(r, g, b));
            
            //获取鼠标点击的信息
            if (MouseHit())
            {
              MOUSEMSG msg = GetMouseMsg();
              switch (msg.uMsg)
              {
              case WM_LBUTTONDOWN:
                //判断鼠标点击的坐标处是否有小球
                if (arr[msg.y / (SIZE*2)][msg.x / (SIZE*2)] == 2)
                {
                  clearcircle(SIZE + ((msg.x / (SIZE*2)) * 2 * SIZE), SIZE + ((msg.y / (SIZE*2)) * 2 * SIZE), SIZE);
                  arr[msg.y / (SIZE*2)][msg.x / (SIZE*2)] = 1;
                  count--;
                  s += 1;
                  printf("sore = %d\n", s);
                  sprintf_s(ch, "%d", s);
                  outtextxy(ROW * (2 * SIZE) + 10, 150, "score:");
                  outtextxy(ROW * (2 * SIZE) + 80, 150, ch);
                }
 
              }
            }
 
            //鼠标无操作,则立即开始随机生成小球
            //避免重复生成在同一个位置,加多判断条件
            else if (x == 5 && arr[row][col] != 2)
            {
              arr[row][col] = 2;
              solidcircle(SIZE + ((col) * 2 * SIZE), SIZE + ((row) * 2 * SIZE), SIZE);
              count++;
              Sleep(speed);
            }
            else
              continue;
          }
        }
 
        //使得生成小球的速度随着鼠标点击次数越多而越快
        if (speed >= 350)
          speed -= 10;
      }
 
      //显示游戏结束情况
      outtextxy(ROW * (2 * SIZE) + 10, 200, "游戏结束");
      outtextxy(ROW * (2 * SIZE) + 10, 220, "您最终的游戏分数为");
      settextstyle(18, 0, "宋体");
      settextcolor(RGB(51, 89, 24));
      sprintf_s(ch, "%d", s);
      outtextxy(ROW * (2 * SIZE) + 40, 250, ch);
 
      //重新开始游戏,跳到again
      outtextxy(ROW * (2 * SIZE) + 10, 300, "按下空格键重新开始");
      key = _getch();
      while (1)
      {
        switch (key)
        {
        case 32:
          goto again;
          break;
        default:
          break;
        }
      }
        break;
    default:
      break;
    }
  }
  getchar();
  closegraph();
}

运行结果

目录
相关文章
|
19天前
|
存储 算法 程序员
C语言:库函数
C语言的库函数是预定义的函数,用于执行常见的编程任务,如输入输出、字符串处理、数学运算等。使用库函数可以简化编程工作,提高开发效率。C标准库提供了丰富的函数,满足各种需求。
ly~
|
1月前
|
数据可视化 BI API
除了 OpenGL,还有哪些常用的图形库可以在 C 语言中使用?
除了OpenGL,C语言中还有多个常用的图形库:SDL,适合初学者,用于2D游戏和多媒体应用;Allegro,高性能,支持2D/3D图形,广泛应用于游戏开发;Cairo,矢量图形库,支持高质量图形输出,适用于数据可视化;SFML,提供简单接口,用于2D/3D游戏及多媒体应用;GTK+,开源窗口工具包,用于创建图形用户界面。这些库各有特色,适用于不同的开发需求。
ly~
151 4
|
1月前
|
C语言 C++
【C语言】编写“猜数字“小游戏
【C语言】编写“猜数字“小游戏
ly~
|
1月前
|
存储 缓存 算法
如何使用 C 语言实现高效的图形渲染?
使用 C 语言实现高效图形渲染可从选择图形库、优化数据结构与算法及利用硬件加速等方面着手。推荐使用 OpenGL 或 SDL 进行图形绘制。OpenGL 功能强大,支持 2D 和 3D 图形,需熟悉其绘图流程;SDL 则提供简单易用的接口。优化方面,合理选择数据结构如数组、哈希表等,使用高效算法如 LOD 可提升渲染速度。利用 GPU 加速和多线程渲染亦能显著提高效率。此外,纹理映射和管理也是关键,适当加载和缓存纹理,减少不必要的绘制操作如视口裁剪和背面剔除,均可增强渲染性能。
ly~
53 5
|
2月前
|
定位技术 API C语言
C语言——实现贪吃蛇小游戏
本文介绍了一个基于Windows控制台的贪吃蛇游戏的实现方法。首先,需调整控制台界面以便更好地显示游戏。接着,文章详细描述了如何使用Win32 API函数如`COORD`、`GetStdHandle`、`GetConsoleCursorInfo`等来控制控制台的光标和窗口属性。此外,还介绍了如何利用`GetAsyncKeyState`函数实现键盘监听功能。文中还涉及了`&lt;locale.h&gt;`库的使用,以支持本地化字符显示。
57 1
C语言——实现贪吃蛇小游戏
|
2月前
|
存储 安全 算法
C 语言——实现扫雷小游戏
本文介绍了使用二维数组创建棋盘并实现扫雷游戏的方法。首先,通过初始化数组创建一个9x9的棋盘,并添加行列标识以便操作。接着,利用随机数在棋盘上布置雷。最后,通过判断玩家输入的坐标来实现扫雷功能,包括显示雷的数量和处理游戏胜利或失败的情况。文中提供了完整的代码实现。
43 1
C 语言——实现扫雷小游戏
|
1月前
|
C语言 定位技术 API
【C语言】实践:贪吃蛇小游戏(附源码)(二)
【C语言】实践:贪吃蛇小游戏(附源码)
【C语言】实践:贪吃蛇小游戏(附源码)(二)
|
1月前
|
C语言 开发者
C语言实现猜数字小游戏(详细教程)
C语言实现猜数字小游戏(详细教程)
|
1月前
|
存储 安全 编译器
深入C语言库:字符与字符串函数模拟实现
深入C语言库:字符与字符串函数模拟实现
|
1月前
|
C语言
【C语言】实践:贪吃蛇小游戏(附源码)(三)
【C语言】实践:贪吃蛇小游戏(附源码)