彈球遊戲
阿新 • • 發佈:2018-11-08
本人剛學c語言沒多久,利用一點閒暇時間編了一個挺有意思的小程式,
使用了easyx圖形庫,可以通過按鍵控制球的重力方向。
有一些bug與不足之處,還望大家指點。
#include <graphics.h> #include <time.h> #include <conio.h> #include <stdio.h> #include <windows.h> int initball(); int process(); int move(int g); int drawball(); int delball(); int point(int g); int up(); int left(); int down(); int right(); struct ball { int x; int y; int speedx = 0; int speedy = 0; }; ball b[20]; int g=0; int i=0; int count = 0; int n = 0; MOUSEMSG m; int main() { initgraph(800, 800); setbkcolor(WHITE); cleardevice(); settextstyle(30, 0, L"微軟雅黑"); settextcolor(RED); outtextxy(0, 0, L"滑鼠點選產生小球(不超過20個),空格開始"); outtextxy(0, 31, L"wasd控制重力方向"); outtextxy(0, 62, L"空格使小球不受重力"); setlinecolor(BLACK); up(); down(); left(); right(); rectangle(98, 98, 702, 702); initball(); while (1) { process(); for (i = 0; i < n; i++) { move(process()); } point(process()); rectangle(98, 98, 702, 702); Sleep(20); } return 0; } int initball() { setlinecolor(GREEN); while (1) { m = GetMouseMsg(); switch (m.uMsg) { case WM_LBUTTONDOWN: b[i].x = m.x; b[i].y = m.y; circle(b[i].x, b[i].y, 20); i++; n++; break; } if (_kbhit()) { if (_getch() == ' ') { return 0; } } if (n > 19) { return 0; } } return 0; } int process() { char i; if (_kbhit()) { i = _getch(); switch (i) { case('w') : g = 2; break; case('a') : g = 3; break; case('s') : g = 1; break; case('d') : g = 4; break; case(' ') : g = 0; break; } } return g; } int move(int g) { delball(); if (g == 0) { if (b[i].y < 679 && b[i].y>121) { b[i].x += b[i].speedx; b[i].y += b[i].speedy; } if (b[i].y >= 679) { b[i].y = 679; b[i].speedy = -b[i].speedy; b[i].x += b[i].speedx; b[i].y += b[i].speedy; } if (b[i].y <= 121) { b[i].y = 121; b[i].speedy = -b[i].speedy; b[i].x += b[i].speedx; b[i].y += b[i].speedy; } if (b[i].x >= 679) { b[i].x = 679; b[i].speedx = -b[i].speedx; b[i].x += b[i].speedx; b[i].y += b[i].speedy; } if (b[i].x <= 121) { b[i].x = 121; b[i].speedx = -b[i].speedx; b[i].x += b[i].speedx; b[i].y += b[i].speedy; } drawball(); } if (g == 1) { if (b[i].y < 679 && b[i].y>121) { b[i].speedy++; b[i].x += b[i].speedx; b[i].y += b[i].speedy; } if (b[i].y>=679) { b[i].y = 679; b[i].speedy = -b[i].speedy; b[i].speedy++; b[i].x += b[i].speedx; b[i].y += b[i].speedy; } if (b[i].y<=121) { b[i].y = 121; b[i].speedy = -b[i].speedy; b[i].speedy++; b[i].x += b[i].speedx; b[i].y += b[i].speedy; } if (b[i].x>=679) { b[i].x = 679; b[i].speedx = -b[i].speedx; b[i].speedy++; b[i].x += b[i].speedx; b[i].y += b[i].speedy; } if (b[i].x<=121) { b[i].x = 121; b[i].speedx = -b[i].speedx; b[i].speedy++; b[i].x += b[i].speedx; b[i].y += b[i].speedy; } drawball(); } if (g == 2) { if (b[i].y < 679 && b[i].y>121) { b[i].speedy++; b[i].x += b[i].speedx; b[i].y -= b[i].speedy; } if (b[i].y >= 679) { b[i].y = 679; b[i].speedy = -b[i].speedy; b[i].speedy++; b[i].x += b[i].speedx; b[i].y -= b[i].speedy; } if (b[i].y <= 121) { b[i].y = 121; b[i].speedy = -b[i].speedy; b[i].speedy++; b[i].x += b[i].speedx; b[i].y -= b[i].speedy; } if (b[i].x >= 679) { b[i].x = 679; b[i].speedx = -b[i].speedx; b[i].speedy++; b[i].x += b[i].speedx; b[i].y -= b[i].speedy; } if (b[i].x <= 121) { b[i].x = 121; b[i].speedx = -b[i].speedx; b[i].speedy++; b[i].x += b[i].speedx; b[i].y -= b[i].speedy; } drawball(); } if (g == 4) { if (b[i].x < 679 && b[i].x>121) { b[i].speedx++; b[i].x += b[i].speedx; b[i].y += b[i].speedy; } if (b[i].x >= 679) { b[i].x = 679; b[i].speedx = -b[i].speedx; b[i].speedx++; b[i].x += b[i].speedx; b[i].y += b[i].speedy; } if (b[i].x <= 121) { b[i].x = 121; b[i].speedx = -b[i].speedx; b[i].speedx++; b[i].x += b[i].speedx; b[i].y += b[i].speedy; } if (b[i].y >= 679) { b[i].y = 679; b[i].speedy = -b[i].speedy; b[i].speedx++; b[i].x += b[i].speedx; b[i].y += b[i].speedy; } if (b[i].y <= 121) { b[i].y = 121; b[i].speedy = -b[i].speedy; b[i].speedx++; b[i].x += b[i].speedx; b[i].y += b[i].speedy; } drawball(); } if (g == 3) { if (b[i].x < 679 && b[i].x>121) { b[i].speedx++; b[i].x -= b[i].speedx; b[i].y += b[i].speedy; } if (b[i].x >= 679) { b[i].x = 679; b[i].speedx = -b[i].speedx; b[i].speedx++; b[i].x -= b[i].speedx; b[i].y += b[i].speedy; } if (b[i].x <= 121) { b[i].x = 121; b[i].speedx = -b[i].speedx; b[i].speedx++; b[i].x -= b[i].speedx; b[i].y += b[i].speedy; } if (b[i].y >= 679) { b[i].y = 679; b[i].speedy = -b[i].speedy; b[i].speedx++; b[i].x -= b[i].speedx; b[i].y += b[i].speedy; } if (b[i].y <= 121) { b[i].y = 121; b[i].speedy = -b[i].speedy; b[i].speedx++; b[i].x -= b[i].speedx; b[i].y += b[i].speedy; } drawball(); } return 0; } int drawball() { setlinecolor(GREEN); circle(b[i].x, b[i].y, 20); return 0; } int delball() { setlinecolor(WHITE); circle(b[i].x, b[i].y, 20); return 0; } int point(int g) { switch (g) { case(0) : setlinecolor(BLACK); up(); down(); left(); right(); break; case(1): setlinecolor(BLACK); up(); setlinecolor(GREEN); down(); setlinecolor(BLACK); left(); right(); break; case(2): setlinecolor(GREEN); up(); setlinecolor(BLACK); down(); left(); right(); break; case(3): setlinecolor(BLACK); up(); setlinecolor(GREEN); left(); setlinecolor(BLACK); down(); right(); break; case(4): setlinecolor(BLACK); up(); setlinecolor(GREEN); right(); setlinecolor(BLACK); left(); down(); break; } return 0; } int up() { line(400, 80, 400, 20); line(400, 20, 350, 50); line(400, 20, 450, 50);//上鍵 return 0; } int down() { line(400, 720, 400, 780); line(400, 780, 350, 750); line(400, 780, 450, 750);//下鍵 return 0; } int left() { line(20, 400, 80, 400); line(20, 400, 50, 350); line(20, 400, 50, 450);//左鍵 return 0; } int right() { line(780, 400, 720, 400); line(780, 400, 750, 350); line(780, 400, 750, 450);//右鍵 return 0; }