貪吃蛇小遊戲—小白的進階之路的開始
阿新 • • 發佈:2018-12-31
該程式的實現主要是通過Easyx實現的大多數功能,因為沒能夠繼續完善所以只展現一部分簡單的程式碼(大一上剛開始的時候學習的,就當作是開始吧)
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
#include<string.h>
int flag = 0, m, n, flag1 = 1;
COLORREF p, q;
typedef struct node {
int x ;
int y;
}Array;
void wall()
{
int i;
setfillcolor(RGB(25, 25, 112));
for (i = 0; i <= 620; i += 20)
{
rectangle(i, 0, 620, 20);//上方的牆
fillrectangle(i, 0, 620, 20);
rectangle(620, i, 640, 460);//右邊的牆
fillrectangle(620, i, 640, 460);
rectangle(i, 460, 640, 480 );//下面的牆
fillrectangle(i, 460, 640, 480);
rectangle(0, i, 20, 480);//左邊的牆
fillrectangle(0, i, 20, 480);
}
}
void fruit()
{
if (flag == 0)
{
m = rand() % 580 + 20;
n = rand() % 420 + 20;
p = getpixel(m, n);
if (p != q)
{
circle(m, n, 5 );
flag = 1;
}
}
}
int main()
{
initgraph(640, 480);
Array a[10];
int i, k = 0;
char ch1 = 54, ch2 = 54;
srand((unsigned)time(NULL));
BeginBatchDraw();//開始繪製背景
IMAGE img1, img;
loadimage(&img1, _T("E:\\solve problem\\lsnack\\Debug\\fate1.jpg"), 599, 439);//設定背景
putimage(21, 21, &img1);
a[0].x = 60;//初始化結構體陣列起點
a[0].y = 20;
rectangle(a[0].x, a[0].y, a[0].x + 20, a[0].y + 20);
wall();
setfillcolor(RGB(225, 165, 0));
fillrectangle(a[0].x, a[0].y, a[0].x + 20, a[0].y + 20);
for (i = 1; i <= 2; i++)
{
a[i].x = a[i - 1].x - 20;
a[i].y = a[i - 1].y;
rectangle(a[i].x, a[i].y, a[i].x + 20, a[i].y + 20);//畫出連續的矩形
setfillcolor(GREEN);
fillrectangle(a[i].x, a[i].y, a[i].x + 20, a[i].y + 20);
q = getpixel(a[i].x + 10, a[i].y + 10);
}
FlushBatchDraw();
while (1)
{
BeginBatchDraw();
if (_kbhit())
{
k = i;
ch1 = _getch();
if ((ch1 == 56 && ch2 != 50) || (ch1 == 50 && ch2 != 56) || (ch1 == 52 && ch2 != 54) || (ch1 == 54 && ch2 != 52))
{
while (!_kbhit())
{
for (k = i; k > 0; k--)
{
a[k].y = a[k - 1].y;
a[k].x = a[k - 1].x;
}
putimage(21, 21, &img1);
switch (ch1)
{
case 56:a[0].y -= 20; break;//上
case 50:a[0].y += 20; break;//下
case 52:a[0].x -= 20; break;//左
case 54:a[0].x += 20; break;//右
}
solidcircle(m, n, 5);
setfillcolor(RGB(225, 165, 0));
fillcircle(m, n, 5);
for (k = 0; k < i; k++)
{
rectangle(a[k].x, a[k].y, a[k].x + 20, a[k].y + 20);//最前方的矩形
setfillcolor(GREEN);
fillrectangle(a[k].x, a[k].y, a[k].x + 20, a[k].y + 20);
setfillcolor(RGB(225, 165, 0));
fillrectangle(a[0].x, a[0].y, a[0].x + 20, a[0].y + 20);
}
Sleep(200);//這個部分應該採取分關卡的形式去比較速度,但是並沒有寫完
if (a[0].x < m + 5 && a[0].x + 20 > m - 5 && a[0].y < n + 5 && a[0].y + 20 > n - 5)
{
flag = 0;
i++;
clearcircle(m, n, 5);
rectangle(a[i].x, a[i].y, a[i].x + 20, a[i].y + 20);
setfillcolor(GREEN);
fillrectangle(a[i].x, a[i].y, a[i].x + 20, a[i].y + 20);
}
for (k = 3; k < i; k++)
if (a[0].x == a[k].x&&a[0].y == a[k].y)
{
initgraph(300, 150);
loadimage(&img, L"E:\\solve problem\\lsnack\\Debug\\game over.jpg", 300, 150);
putimage(0, 0, &img);
FlushBatchDraw();
system("pause");
closegraph;
exit(0);
}
if (a[0].x < 20 || a[0].x > 600 || a[0].y < 20 || a[0].y > 440)
{
initgraph(300, 150);
IMAGE img;
loadimage(&img, L"E:\\solve problem\\lsnack\\Debug\\game over.jpg", 300, 150);
putimage(0, 0, &img);
FlushBatchDraw();
system("pause");
closegraph;
exit(0);
}
if (i >= 20)//判斷達到吃到多少個就通關(事實上這一步驟還可以完善,例如用一個記錄分數的牌子)
{
initgraph(300, 150);
IMAGE img2;
loadimage(&img2, L"E:\\solve problem\\lsnack\\Debug\\PASS.jpg", 300, 150);
putimage(0, 0, &img2);
FlushBatchDraw();
system("pause");
closegraph;
exit(0);
}
ch2 = ch1;
fruit();
FlushBatchDraw();
}
}
}
if (a[0].x < m + 5 && a[0].x + 20 > m - 5 && a[0].y < n + 5 && a[0].y + 20 > n - 5)
clearcircle(m, n, 5);
FlushBatchDraw();
}
system("pause");
closegraph;
return 0;
}
從這裡開始的c語言程式設計之路
這個程式以及程式碼還有很多很多地方待完善不過只能等到自己什麼時候有時間再來操作了
現在是大一下也決定好要先轉型學一下web前端開發,之前草草的學了資料結構但是並不是很理想,現在看來只會覺得當時的自己還不夠認真,沒有集中精力專心去做那件事,不過即便是看上去的很努力也把自己累個半死
等空閒時間再陸陸續續貼一些之前自己刷題的程式碼吧(比如藍橋杯的,杭電oj的)
還是要加油啊,雖然說轉專業依舊艱難,但是總得繼續下去的