項目預備知識

導入兩個頭文件

#include <graphics.h> // 引入 EasyX 的圖形庫頭文件
#include <conio.h>    // 引入 conio.h 以使用 getch()

窗口創建函數:小黑屏

initgraph(640, 480, SHOWCONSOLE);
closegraph();   //關閉一個窗口

設置背景顏色:這里設置完顏色之后,還需要清除一下設備,不然還是黑色的

setbkcolor(WHITE);  //設置背景顏色
cleardevice();  //清屏,把黑色清楚掉......每畫一個東西,都需要清除一次

繪圖函數:(這里以畫圓為例),前綴是需要繪圖的類型,后綴是種類

circle()無填充
fillcircle()有邊框填充
solidcircle()無邊框填充

下面是使用方式:

circle(50, 50, 50);
fillcircle(50, 150, 50);
solidcircle(50, 250, 50);

設置類:這個是窗口下的形狀

setlinestyle(PS_SOLID, 5);   //設置線條樣式    setlinestyle(樣式,寬度)
setfillcolor(YELLOW);   //設置填充顏色    setfillcolor(顏色)
setlinecolor(BLUE);      //設置線條邊框顏色 setlinecolor

設置文字的函數:

//設置文字顏色
settextcolor(RED);
//設置文字樣式
settextstyle(20, 0, "楷體");
//設置背景模式
//變成透明TRANSPARENT
setbkmode(TRANSPARENT);

輸出文字:

outtextxy(50, 50, "azlml");

文字居中的方法:

//把文字居中的操作,畫圖理解
fillrectangle(200, 50, 500, 100);   //畫一個矩形
settextcolor(RGB(0, 0, 14));
char arr[] = "居中顯示";
int width = 300 / 2 - textwidth(arr) / 2;
int hight = 50 / 2 - textheight(arr) / 2;
outtextxy(width + 200, hight + 50, arr);

有關圖片的函數:

IMAGE img; //定義一個對象
//加載圖片
//  用的是相對路徑 ./表示當前文件夾下    ../當前文件夾的上一級目錄
//絕對路徑  C:\Users\傅\source\repos\項目\項目\小鳥游六花.jpg
//jpg支持背景透明,png不支持背景透明
loadimage(&img, "./小鳥游六花.jpg", 250, 250); //可以調整圖片的大小,不是在輸出的時候改
//輸出圖片
putimage(0, 0, &img);

有關鍵盤的函數:

kbhit()    //判斷是有鍵盤有被按下
char key = _getch();    //讀鍵盤的消息

鍵盤的操作:

if (kbhit())    //判斷是否有鍵盤按下
{//鍵盤消息char key = _getch();printf("%d%c\n", key, key);switch (key){//上鍵case 'w':case 'W':yy--;printf("上鍵\n");break;case 's':case 'S':yy++;printf("下鍵\n");break;case 'a':case 'A':xx--;printf("左鍵\n");break;case 'd':case 'D':xx++;printf("右鍵\n");break;}
}

鼠標操作:

//鼠標消息
if (MouseHit())
{MOUSEMSG msg = GetMouseMsg();// 消息分發switch (msg.uMsg){case WM_LBUTTONDOWN:outtextxy(400, 400, "鼠標左鍵按下");if (msg.x > 200 && msg.x < 500 && msg.y>50 && msg.y < 200)  //在框框內{printf("在框框內\n");//輸出鼠標點擊的坐標printf("坐標(%d,%d)\n", msg.x, msg.y);}break;case WM_RBUTTONDOWN:outtextxy(400, 400, "鼠標右鍵按下");if (msg.x > 200 && msg.x < 500 && msg.y>50 && msg.y < 200)  //在框框內{printf("在框框內\n");//輸出鼠標點擊的坐標printf("坐標(%d,%d)\n", msg.x, msg.y);}break;}
}/*case  WM_MOUSEMOVE:       ……break;//鼠標移動消息case  WM_MOUSEWHEEL:      ……break;// 鼠標滾輪撥動消息case  WM_LBUTTONDOWN:     ……break;// 左鍵按下消息case  WM_MBUTTONDOWN:     ……break;// 中鍵按下消息case  WM_RBUTTONDOWN:     ……break;// 右鍵按下消息                        
*/

2048項目

#include <graphics.h> // 引入 EasyX 的圖形庫頭文件
#include <conio.h>    // 引入 conio.h 以使用 getch()
#include<iostream>
#include<stdlib.h>
#include<time.h>
#include<math.h>
using namespace std;#define GRID_W 100//格子的寬度 100
#define MAX_SIZE 4//每行列,格子的數量
#define INTERVAL 15//格子的間距
#define WIN_SIZE MAX_SIZE * GRID_W + INTERVAL*5 // 矩形窗口
//定義一個數組,用來存儲數據
int map[MAX_SIZE][MAX_SIZE];
int flag = 0;
enum Color {zero = RGB(205, 193, 180),two1 = RGB(238, 228, 218),two2 = RGB(237, 224, 200),two3 = RGB(242, 177, 121),two4 = RGB(245, 149, 99),two5 = RGB(246, 124, 95),two6 = RGB(246, 94, 59),two7 = RGB(242, 177, 121),two8 = RGB(237, 204, 97),two9 = RGB(255, 0, 128),two10 = RGB(145, 0, 72),two11 = RGB(242, 17, 158),back = RGB(187, 173, 160),
};
Color arr[13] = { zero,two1,two2, two3, two4, two5, two6, two7, two8, two9, two10,two11,back };
//隨機產生一個整數2 or 4 ,產生2的概率大于4
int creatnum()
{//隨機數 rand 需要加上頭文件//直接用rand是不會產生隨機數的,在此之前,需要設置隨機數種子//需要獲取時間,需要加上time.h頭文件srand((unsigned)time(NULL) + clock());printf("%d",rand());if (rand()%6 ==0){return 4;}else{return 2;}
}
//初始化數據,隨機產生兩個數
void gameinit()
{for (int i=0; i<2 ;){//隨機生成兩個下標int r = rand() % 4;int c = rand() % 4; if (!map[r][c]){map[r][c] = creatnum();++i;}}
}
void gamenew()
{for (int i = 0; i < 1;){//隨機生成兩個下標int r = rand() % 4;int c = rand() % 4;if (!map[r][c]){map[r][c] = creatnum();++i;}}
}
//繪制主界面
void gamedraw()
{//設置背景顏色setbkcolor(RGB(186, 173, 160));cleardevice();	//設置顏色的時候需要清除背景for (int i = 0; i < MAX_SIZE; ++i){for (int j = 0; j < MAX_SIZE; ++j){//找到對應格子的左上角坐標int x1 = INTERVAL * (j+1) + GRID_W * j, y1=INTERVAL* (i + 1) + GRID_W * i;int x2 = x1 + GRID_W, y2 = y1 + GRID_W;int index = log2(map[i][j]);//設置格子填充顏色COLORREF tcolor = arr[index] ;setfillcolor(tcolor);//繪制格子solidroundrect(x1, y1, x2, y2,10,10);//把數組里面的數據繪制到圖形窗口上面if (map[i][j] != 0)	//去0{//設置文字樣式settextstyle(50, 0, "黑體");//設置文字背景透明setbkmode(TRANSPARENT);settextcolor(RGB(119, 110, 101));//把整形轉化為字符串char str[10] = "";sprintf_s(str, "%d", map[i][j]);//居中int width = textwidth(str);int height = textheight(str);int xx = x1 + (GRID_W - width) / 2;int yy = y1 + (GRID_W - height) / 2;outtextxy(xx, yy, str);}}}
}//移動方格,移動數組里面的數
void moveup()
{for (int i = 0; i < MAX_SIZE; ++i){int temp = 0;for (int j = 1; j < MAX_SIZE; ++j){if (map[j][i]){if (!map[temp][i])	//上方元素為0{map[temp][i] = map[j][i];map[j][i] = 0;}else if (map[temp][i] == map[j][i])	//上方元素與當前元素相同{map[temp][i] *= 2;map[j][i] = 0;temp++ ;}else	//有距離{map[temp + 1][i] = map[j][i];if (temp + 1 != j){map[j][i] = 0;}temp++;}flag = 1;}}}
}void movedown()
{for (int i = MAX_SIZE-1; i >=0; --i){int temp = MAX_SIZE - 1;for (int j = MAX_SIZE - 2; j >=0; --j){if (map[j][i]){if (!map[temp][i]){map[temp][i] = map[j][i];map[j][i] = 0;}else if (map[temp][i] == map[j][i]){map[temp][i] *= 2;map[j][i] = 0;temp--;}else{map[temp - 1][i] = map[j][i];if (temp - 1 != j){map[j][i] = 0;}temp--;}flag = 1;}}}
}void moveleft()
{for (int i = 0 ; i < MAX_SIZE ; ++i){int temp = 0;for (int j = 1; j <MAX_SIZE; ++j){if (map[i][j]){if (!map[i][temp]){map[i][temp] = map[i][j];map[i][j] = 0;}else if (map[i][temp] == map[i][j]){map[i][temp] *= 2;map[i][j] = 0;temp++;}else{map[i][temp +1] = map[i][j];if (temp + 1 != j){map[i][j] = 0;}temp++;}flag = 1;}}}
}void moveright()
{for (int i = MAX_SIZE-1; i >=0; --i){int temp = MAX_SIZE-1;for (int j = MAX_SIZE - 2; j >=0; --j){if (map[i][j]){if (!map[i][temp]){map[i][temp] = map[i][j];map[i][j] = 0;}else if (map[i][temp] == map[i][j]){map[i][temp] *= 2;map[i][j] = 0;temp--;}else{map[i][temp -1] = map[i][j];if (temp - 1 != j){map[i][j] = 0;}temp--;}flag = 1;}}}
}   //按鍵處理
void keydeal()
{char key = _getch();switch (key){case 'w':case 'W':moveup();break;case 's':case 'S':movedown();break;case 'a':case 'A':moveleft();break;case 'd':case 'D':moveright();break;}
}int main()
{//創建窗口initgraph(WIN_SIZE, WIN_SIZE);gameinit();while (1){gamedraw();keydeal();if (flag){gamenew();flag = 0;}}_getch();closegraph();	//關閉窗口return 0;
}

球球大作戰:

#include <graphics.h> // 引入 EasyX 的圖形庫頭文件
#include <conio.h>    // 引入 conio.h 以使用 getch()
#include<time.h>
#include<stdlib.h>
#include<math.h>
#define FOOD_NUM 100
#define MAX_WIDTH 640
#define MAX_HIGHT 480
#define eatting(x1,y1,x2,y2) sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))struct vector2d
{int x;int y;
};struct player
{vector2d pos;	//球的位置int r;	//球的半徑vector2d v = { 0 };COLORREF color;	//角色球的顏色
};struct Food
{vector2d pos;	//球的位置int r;	//球的半徑COLORREF color;	//球的顏色
};
//初始化玩家
void play_init(player *players)
{players->pos.x = rand() % MAX_HIGHT;players->pos.y = rand() % MAX_WIDTH;players->r = rand() % 10+5;players->v = { 0 };players->color = RGB(rand() % 256, rand() % 256, rand() % 256);
}
//繪制玩家
void player_drew(player* players)
{setfillcolor(players->color);//創建一個球solidcircle(players->pos.x, players->pos.y, players->r);
}void food_init(Food* food)
{food->pos.x = rand() % MAX_HIGHT;food->pos.y = rand() % MAX_WIDTH;food->r = rand() % 10 + 1;food->color = RGB(rand() % 256, rand() % 256, rand() % 256);
}void Food_drew(Food* food)
{setfillcolor(food->color);//創建一個球solidcircle(food->pos.x, food->pos.y, food->r);
}void move(player* players,ExMessage* msg)
{//按下消息if (msg->message == WM_KEYDOWN){switch (msg->vkcode){case VK_UP:players->v.y = -1;break;case VK_DOWN:players->v.y = 1;break;case VK_LEFT:players->v.x = -1;break;case VK_RIGHT:players->v.x = 1;break;}}else if (msg->message == WM_KEYUP)	//放開消息{switch (msg->vkcode){case VK_UP:players->v.y = 0;break;case VK_DOWN:players->v.y = 0;break;case VK_LEFT:players->v.x = 0;break;case VK_RIGHT:players->v.x = 0;break;}}
}void update(player* players)
{int tx = players->pos.x;int ty = players->pos.y;players->pos.x += players->v.x, players->pos.y += players->v.y;if (players->pos.x<0 || players->pos.x>MAX_WIDTH){players->pos.x = tx;}if (players->pos.y<0 || players->pos.y>MAX_HIGHT){players->pos.y = ty;}
}int main()
{//初始化界面initgraph(640, 480);	//建立一個矩形setbkcolor(RGB(214, 214, 214));	//設置背景顏色cleardevice();//設置了隨機數種子srand(time(NULL));player players;play_init(&players);player_drew(&players);//產生可以吃的小球Food food[FOOD_NUM] = { 0 };//初始化每個小球的信息for (int i = 0; i < FOOD_NUM; ++i){food_init(food + i);}while (1){BeginBatchDraw();cleardevice();//繪制食物for (int i = 0; i < FOOD_NUM; ++i){Food_drew(food + i);}player_drew(&players);EndBatchDraw();for (int i = 0; i < FOOD_NUM; ++i){//如果被吃了,那么就更新球的位置,半徑加1if (eatting(players.pos.x, players.pos.y, food[i].pos.x, food[i].pos.y) < players.r){food_init(food+i);players.r++;}}update(&players);//消息處理(按鍵  鼠標)ExMessage msg = { 0 };//獲取消息if (peekmessage(&msg)){move(&players, &msg);}Sleep(1);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  }                                                                                                                                                                                             _getch();closegraph();	//關閉界面return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715071.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715071.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715071.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

10.7、華為數通HCIP-DataCom H12-821單選題:121-140

121、關于OSPF特性描述錯誤的是:D A、OSPF采用鏈路狀態算法。 B、每個路由器通過泛洪 LSA 向外發布本地鏈路狀態信息 C、每臺 OSPF 設備都會收集其它路由器發來的LSA 所有的LSA 放在一起便組成了鏈路狀態數據庫LSDB, D、OSPF 區域0中所有路由器的 LSDB 都相同。 E、每臺…

【無標題】TMGM官網平臺切爾西足球俱樂部合作

TMGM作為一家在三大洲均設有辦事處的行業領導者&#xff0c;TMGM 被視為可靠的差價合約交易提供商&#xff0c;其重點是監管合規、技術創新與他聯系?&#x1f6f0;?TMGM818卓越的客戶服務。 切爾西足球俱樂部在亞太地區擁有龐大的球迷群體&#xff0c;并在該地區建立了多種亞…

2024年騰訊云優惠政策_騰訊云TOP10優惠活動

騰訊云服務器多少錢一年&#xff1f;62元一年起&#xff0c;2核2G3M配置&#xff0c;騰訊云2核4G5M輕量應用服務器218元一年、756元3年&#xff0c;4核16G12M服務器32元1個月、312元一年&#xff0c;8核32G22M服務器115元1個月、345元3個月&#xff0c;騰訊云服務器網txyfwq.co…

AOP案例(黑馬學習筆記)

需求 需求&#xff1a;將案例中增、刪、改相關接口的操作日志記錄到數據庫表中 ● 就是當訪問部門管理和員工管理當中的增、刪、改相關功能接口時&#xff0c;需要詳細的操作日志&#xff0c;并保存在數據表中&#xff0c;便于后期數據追蹤。 操作日志信息包含&#xff1a; ●…

IO多路轉接

1.select 初識select 系統提供 select 函數來實現多路復用輸入 / 輸出模型 . select 系統調用是用來讓我們的程序監視多個文件描述符的狀態變化的 ; 程序會停在 select 這里等待&#xff0c;直到被監視的文件描述符有一個或多個發生了狀態改變 ; select函數模型 select的函…

服務器硬件得基礎知識介紹

服務器硬件是計算機硬件的一種&#xff0c;專門用于構建服務器系統。服務器硬件通常具有高性能、高可靠性和可擴展性等特點&#xff0c;以滿足企業級應用的需求。本文將從以下幾個方面介紹服務器硬件的基礎知識&#xff1a;服務器概述、CPU、內存、存儲、網絡、電源和散熱、服務…

【機器學習】CIFAR-10數據集簡介、下載方法(自動)

【機器學習】CIFAR-10數據集簡介、下載方法(自動) &#x1f308; 個人主頁&#xff1a;高斯小哥 &#x1f525; 高質量專欄&#xff1a;Matplotlib之旅&#xff1a;零基礎精通數據可視化、Python基礎【高質量合集】、PyTorch零基礎入門教程&#x1f448; 希望得到您的訂閱和支…

0904多元復合函數求導-多元函數微分法及其應用

文章目錄 1 復習一元函數復合函數求導2 一元函數與多元函數復合的情形3 多元函數與多元函數復合的情形4 其他情形5 抽象復合函數求導6 全微分不變性結語 1 復習一元函數復合函數求導 y f ( u ) , u ? ( x ) ? f [ ? ( x ) ] d y d x d y d u ? d u d x f ′ ( u ) ? ?…

Python正則表達式:從基礎到高級應用的全面總結與實戰【第103篇—JSON模塊】

Python正則表達式&#xff1a;從基礎到高級應用的全面總結與實戰 正則表達式是一種強大的文本匹配和處理工具&#xff0c;廣泛應用于文本處理、數據抽取、表單驗證等領域。本文將從正則表達式的基礎知識出發&#xff0c;逐步深入&#xff0c;最終結合代碼實戰&#xff0c;帶你…

趙文彬將出席無磷鍋爐工藝助劑在鍋爐水節水節能應用

演講嘉賓&#xff1a;趙文彬 集團副總/技術總監 上遠未來水務集團有限公司 演講題目&#xff1a;無磷鍋爐工藝助劑在鍋爐水節水節能方面的應用 會議簡介 “十四五”規劃中提出&#xff0c;提高工業、能源領城智能化與信息化融合&#xff0c;明確“低碳經濟”新的戰略目標&a…

mac 安裝hbuilderx

下載 HBuilderX下載地址: 下載地址 選額mac版本點擊下載 安裝 如圖&#xff0c;將HBuilderX拖到Applications&#xff0c;才是正確的安裝姿勢。 MacOSX&#xff0c;軟件必須安裝到/Applications目錄&#xff0c;如未安裝到此目錄&#xff0c;可能會出現插件安裝失敗、項目創建…

基于BERTopic模型的中文文本主題聚類及可視化

文章目錄 BERTopic簡介模型加載地址文本加載數據處理BERTopic模型構建模型結果展示主題可視化總結BERTopic簡介 BERTopic論文地址:BERTopic: Neural topic modeling with a class-based TF-IDF procedure BERTopic是一種結合了預訓練模型BERT和主題建模的強大工具。它允許我…

Linux中的動靜態庫

目錄 一、靜態庫 &#xff08;1&#xff09;靜態庫的優缺點&#xff1a; &#xff08;2&#xff09;Linux下靜態庫的創建和執行 1.直接編譯?編輯 2.指定路徑和庫名 3.用LIBRARY_PATH環境變量來配置路徑 二、動態庫 &#xff08;1&#xff09;動態庫的優缺點 &#xff…

javaweb請求與響應

前言 前面介紹了對應的服務器端的相關代碼。這里開始學習服務器端與客戶端的數據請求與響應 這里的僅僅是一個簡單的調用&#xff0c;并沒有經過servelert接口來進行調用&#xff0c;同前面的一樣&#xff0c;我們介紹對應的本地服務器進行的部署項目。 代碼 //屬于簡單的不…

Java學習—線程的創建

Java 中的多線程是一種強大的機制&#xff0c;允許程序同時執行兩個或兩個以上的部分。這些同時執行的部分被稱為線程&#xff0c;它們可以使程序的執行更加高效&#xff0c;特別是在進行大量計算或等待資源&#xff08;比如網絡資源或文件系統&#xff09;時。Java 提供了在程…

Scratch 第十三課-飛機大戰游戲

第十三課-飛機大戰游戲 學習目標 這節課我們做一款大家都愛玩的飛機大戰游戲&#xff0c;學習重點&#xff1a; 如何導入外部角色如何讓飛機發射子彈鼠標控制角色移動 程序設計 程序分析 &#xff1a; 飛機大戰游戲相信很多小朋友都玩過&#xff0c;我方飛機在下方&#xf…

LabVIEW石油鉆機提升系統數字孿生技術

LabVIEW石油鉆機提升系統數字孿生技術 隨著數字化、信息化、智能化的發展&#xff0c;石油鉆采過程中的石油鉆機數字化技術提升成為了提高鉆井效率、降低生產成本的重要途徑。基于中石油云平臺提供的數據&#xff0c;采用數字孿生技術&#xff0c;對石油鉆機提升系統進行數字化…

[Redis]——初識Redis

一、Redis為非關系型數據庫 ?我們常見的MySQL、SQLServer都是關系型數據庫&#xff0c;那他們之間有什么區別與聯系呢&#xff1f; &#x1f4d5;關系型數據庫與非關系型數據庫的區別&#xff08;面試題&#xff09; 解釋&#xff1a; SQL數據庫中的表是有結構的&#xff0c;包…

騰訊云學生云服務器_學生云主機_學生云數據庫_云+校園特惠套餐

2024年騰訊云學生服務器優惠活動「云校園」&#xff0c;學生服務器優惠價格&#xff1a;輕量應用服務器2核2G學生價30元3個月、58元6個月、112元一年&#xff0c;輕量應用服務器4核8G配置191.1元3個月、352.8元6個月、646.8元一年&#xff0c;CVM云服務器2核4G配置842.4元一年&…

小程序和頁面生命周期詳解

目錄 小程序的生命周期 創建&#xff08;onLoad&#xff09;&#xff1a; 顯示&#xff08;onShow&#xff09;&#xff1a; 隱藏&#xff08;onHide&#xff09;&#xff1a; 卸載&#xff08;onUnload&#xff09;&#xff1a; 錯誤監聽&#xff08;onError&#xff09;…