graphics.h是針對DOS下的一個C語言圖形庫 (c++也可以)
目前支持下載此頭文件的常用的有兩種:
1. EGE (Easy Graphics Engine)
2. EasyX Graphics Library
EGE, 全名Easy Graphics Engine, 是windows下的簡易繪圖庫,是一個類似BGI(graphics.h)的面向C/C++語言新手的圖形庫
EasyX, 全名EasyX Graphics Library, 是針對 Visual C++ 的免費繪圖庫,支持 VC6.0 ~ VC2022,簡單易用,學習成本極低,應用領域廣泛。目前已有許多大學將 EasyX 應用在教學當中
我建議Visual Studio用EasyX, Dev-C++可以用EGE
解決的方法:去 EasyX官網 下載EasyX的exe程序,點擊后直接對自己使用的VC版本進行安裝就行了,很簡單。.
Graphics.h常用用法:
1.initgraph(width, height)和closegraph()
initgraph可以創(chuàng)建一個寬度為width, 高度為height的圖形界面窗口
運行結束后可以通過closegraph來關閉窗口
注, closegraph之前記得用getch()函數(shù)來接收用戶輸入, 防止程序剛繪畫玩就關閉窗口了
2.line(x1,y1,x2,y2)
從x1,y1坐標畫一條直線到x2,y2坐標
3.setcolor和RGB
setcolor()可以把line畫出來的直線變成另外一種顏色
RGB可以返回setcolor的自定義參數(shù)
RGB(r,g,b)可以修改不同濃度的紅, 綠, 藍
EX:
setcolor(RGB(200,0,0))可以將line畫出來的直線變成紅色
4.circle(x,y,radius)
在x,y坐標點畫一個半徑為radius的圓
EX:
circle(200, 200, 100);
5.setfillcolor, bar(x1,y1,x2,y2)
bar函數(shù)可以畫出一個矩形
范圍為:x坐標從50-300,y坐標從100-200
setfillcolor()可以改變Bar的填充顏色值,參數(shù)也是RGB()函數(shù)的自定義顏色
6.fillellipse(x,y,xr,yr);
畫一個在x, y坐標點的實心橢圓
x軸上的半徑為xr
y軸上的半徑為yr
注:setfillcolor也可以改變其填充顏色值
7.setfontbkcolor(), setfont(12, 0, "宋體")
setfontcolor可以修改創(chuàng)建的文字的背景顏色值
setfont(12,0,"宋體")的第一個參數(shù)是字體的高度
第二個參數(shù)是字體的寬度, 如果填0, 那就會使用默認比例值
第三個參數(shù)是設置文字的字體樣式
8.outtextxy(x, y, 字符串);
這個函數(shù)可以在坐標x,y坐標點輸出字符串
注:字符串也可以是中文
EX:
outtextxy(100, 150, "中文也是支持的");
小游戲運行效果圖:
文章來源:http://www.zghlxwxcb.cn/news/detail-643083.html
貪吃蛇游戲源代碼:
// 貪吃蛇小游戲.cpp : 定義控制臺應用程序的入口點。
//
#include "stdafx.h"
#include <graphics.h>
#include <Windows.h>
#include <time.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include "io.h"
#define S_LEN 400 //蛇的最大節(jié)數(shù)
#define S_SPEED 200 //蛇的速度
#define S_SIZE 20 //蛇的大小
//全局變量
int score = 0;
typedef enum Direction
{
up = 72,
down = 80,
left = 75,
right = 77
}; //蛇的方向
//坐標結構體
struct Coordinate
{
int x;
int y;
};
//蛇的結構體
struct Snake
{
Coordinate sCo[S_LEN]; //每一節(jié)蛇的坐標
int num; //蛇的節(jié)數(shù)
Direction direction; //蛇的方向
}snake;
//食物的結構體
struct Food
{
Coordinate fCo;
int flag; //食物是否被吃
}food;
//函數(shù)聲明
void InitSnake(); //初始化蛇
void Snake_Food(); //食物坐標
void Snake_Food_Paint(); //畫食物
void Snake_Paint(); //畫蛇
void Snake_Move(); //蛇移動
void Snake_Change(); //方向性移動
void Snake_Eat(); //食物是否被吃
void Snake_Break(); //判斷是否撞自己
void Game_Over(); //結束游戲
int main(int argc, char *argv[])
{
InitSnake();
while (true)
{
while (!_kbhit())
{
settextcolor(RED);
score = (snake.num - 2) * 100;
char s[5];
sprintf(s, "%d", score);
outtextxy(500, 60, s);
if (food.flag == 0)
{
Snake_Food();
}
Snake_Food_Paint();
Snake_Break();
Snake_Eat();
Snake_Move();
Sleep(S_SPEED);
}
Snake_Change();
}
return 0;
}
//初始化蛇
void InitSnake()
{
//初始化圖形界面
initgraph(640, 480);
setbkcolor(RGB(168, 168, 168));
cleardevice();
settextcolor(RED);
settextstyle(32, 0, "黑體");
outtextxy(510, 20, "貪吃蛇");
settextcolor(BLACK);
settextstyle(16, 0, "宋體");
outtextxy(495, 100, "分數(shù):");
outtextxy(500, 400, "By:逃逸的卡路里");
setcolor(RGB(46, 85, 6));
setfillcolor(RGB(46, 85, 6));
fillrectangle(0, 0, 480, 480);
setcolor(RGB(199, 177, 163));
setfillcolor(RGB(199, 177, 163));
fillrectangle(40, 40, 440, 440);
setcolor(RGB(102, 86, 0));
for (int i = 0; i < 5; i++)
{
rectangle(39 - i, 39 - i, 441 + i, 441 + i);
}
setcolor(RGB(168, 147, 130));
for (int i = 60; i < 440; i += 20)
{
line(i, 40, i, 440);
line(40, i, 440, i);
}
setorigin(40, 40);
setcolor(RGB(56, 89, 0));
setfillcolor(RGB(91, 193, 45));
fillcircle(10, 10, 9); //第一節(jié)蛇
setfillcolor(WHITE);
fillcircle(8, 5, 2);
fillcircle(8, 15, 2);
food.flag = 0; //食物被吃
//蛇坐標初始化
snake.sCo[0].x = 0 + S_SIZE;
snake.sCo[0].y = 0;
snake.sCo[1].x = 0;
snake.sCo[0].y = 0;
snake.num = 2;
snake.direction = right;
}
//食物坐標
void Snake_Food()
{
int i;
srand((unsigned)time(NULL));
while (true)
{
int num = 0;
food.fCo.x = rand() % (400 / S_SIZE)*S_SIZE;
food.fCo.y = rand() % (400 / S_SIZE)*S_SIZE;
for (i = 0; i < snake.num; i++)
{
if (snake.sCo[i].x == food.fCo.x&&snake.sCo[i].y == food.fCo.y)
{
num++;
}
}
if (num == 0)
{
break;
}
}
food.flag = 1;
}
//畫食物
void Snake_Food_Paint()
{
setcolor(RED);
setfillcolor(RED);
fillcircle(food.fCo.x + 10, food.fCo.y + 10, 8);
}
//畫蛇
void Snake_Paint()
{
for (int i = snake.num - 1; i >= 0; i--)
{
setcolor(RGB(56, 89, 0));
setfillcolor(RGB(91, 193, 45));
fillcircle(snake.sCo[i].x + 10, snake.sCo[i].y + 10, 9);
if (i == 0)
{
setfillcolor(WHITE);
switch (snake.direction)
{
case up:
fillcircle(snake.sCo[i].x + 5, snake.sCo[i].y + 12, 2);
fillcircle(snake.sCo[i].x + 15, snake.sCo[i].y + 12, 2);
break;
case down:
fillcircle(snake.sCo[i].x + 5, snake.sCo[i].y + 8, 2);
fillcircle(snake.sCo[i].x + 15, snake.sCo[i].y + 8, 2);
break;
case left:
fillcircle(snake.sCo[i].x + 12, snake.sCo[i].y + 5, 2);
fillcircle(snake.sCo[i].x + 12, snake.sCo[i].y + 15, 2);
break;
case right:
fillcircle(snake.sCo[i].x + 8, snake.sCo[i].y + 5, 2);
fillcircle(snake.sCo[i].x + 8, snake.sCo[i].y + 15, 2);
break;
}
}
}
setcolor(RGB(199, 177, 163));
setfillcolor(RGB(199, 177, 163));
fillcircle(snake.sCo[snake.num].x + 10, snake.sCo[snake.num].y + 10, 9);
}
//蛇移動
void Snake_Move()
{
for (int i = snake.num; i > 0; i--)
{
snake.sCo[i].x = snake.sCo[i - 1].x;
snake.sCo[i].y = snake.sCo[i - 1].y;
}
switch (snake.direction)
{
case up:
if (snake.sCo[0].y == 0)
{
snake.sCo[0].y = 400 - S_SIZE;
}
else
{
snake.sCo[0].y -= S_SIZE;
}
break;
case down:
if (snake.sCo[0].y == 400 - S_SIZE)
{
snake.sCo[0].y = 0;
}
else
{
snake.sCo[0].y += S_SIZE;
}
break;
case left:
if (snake.sCo[0].x == 0)
{
snake.sCo[0].x = 400 - S_SIZE;
}
else
{
snake.sCo[0].x -= S_SIZE;
}
break;
case right:
if (snake.sCo[0].x == 400 - S_SIZE)
{
snake.sCo[0].x = 0;
}
else
{
snake.sCo[0].x += S_SIZE;
}
break;
}
Snake_Paint();
}
//方向性移動
void Snake_Change()
{
int ch;
ch = getch();
switch (ch)
{
case 'w':
case 'W':
case up:
if (snake.direction != down)
{
snake.direction = up;
}
break;
case 's':
case 'S':
case down:
if (snake.direction != up)
{
snake.direction = down;
}
break;
case 'a':
case 'A':
case left:
if (snake.direction != right)
{
snake.direction = left;
}
break;
case 'd':
case 'D':
case right:
if (snake.direction != left)
{
snake.direction = right;
}
break;
}
}
//食物是否被吃
void Snake_Eat()
{
if (snake.sCo[0].x == food.fCo.x&&snake.sCo[0].y == food.fCo.y)
{
snake.num++;
food.flag = 0;
}
}
//判斷是否撞自己
void Snake_Break()
{
for (int i = snake.num - 1; i > 3; i--)
{
if (snake.sCo[0].x == snake.sCo[i].x&&snake.sCo[0].y == snake.sCo[i].y)
{
Game_Over();
}
}
}
//結束游戲
void Game_Over()
{
cleardevice();
setcolor(WHITE);
outtextxy(200, 160, "GAME OVER!!!");
Sleep(10000);
closegraph();
}
最后
希望對看到的小伙伴有幫助,有需要改進的地方,歡迎一起討論學習哦。文章來源地址http://www.zghlxwxcb.cn/news/detail-643083.html
到了這里,關于C++小游戲貪吃蛇源碼的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!