c++语言表白超炫图形_教你用C语言加图形库打造炫酷表白连连看
生活随笔
收集整理的這篇文章主要介紹了
c++语言表白超炫图形_教你用C语言加图形库打造炫酷表白连连看
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
圖1
今天小編用簡單的C語言知識寫一個連連看的游戲,但是是有含義的哈,游戲玩完之后又是屬于一個表白程序,也感覺不錯的哦。
下面小編把全部的代碼發出來一下,以及效果圖發一下,最終的話把涉及的知識點也講解一下,小編用的編譯器是VS2015哈。
#include<graphics.h>//圖形庫 #include<stdio.h> #include<time.h>//隨機數 //#include<window.h> 圖形庫與windows.h有沖突 #include<mmsystem.h>//放音樂 #pragma comment(lib,"WINMM.LIB")//需要的庫 /* 1.連連看部分 加載圖片 數組部分 ---1.隨機 2.成對出現 圖片貼進去-----用數組 二維數組 xy圖片貼的位置 元素的值 表示貼什么圖片 獲取用戶點擊 判斷能否消除 2.表白部分 有背景圖片 寫出需要說的話 彈窗部分 */ //窗口大小 640*480 IMAGE img[9]; int map[8][6];//數組大小 8*6 1.窗口大小 2.圖片大小 80*80 int win;//全局變量 //函數聲明 void putimg();//加載圖片 void init();//數組賦值 void draw();//畫圖部分 int playgame();//獲取鼠標點擊 void play();//處理兩次點擊 void lo(); //void //===================================== //函數定義部分 void putimg() {//圖形庫里面的函數 initgraph(640, 480);//創建窗口 loadimage(&img[0], "1.jpg", 80, 80);//加載圖片 loadimage(&img[1], "2.jpg", 80, 80); //L多字節字符集 loadimage(&img[2], "3.jpg", 80, 80); loadimage(&img[3], "4.jpg", 80, 80); loadimage(&img[4], "5.jpg", 80, 80); loadimage(&img[5], "6.jpg", 80, 80); loadimage(&img[6], "7.jpg", 80, 80); loadimage(&img[7], "8.jpg", 80, 80); loadimage(&img[8], "背景.jpg", 640, 480);//窗口大小一樣大 } void init() { //1.map 賦值 每張圖片放哪里 放哪張圖片 //map隨機賦值 成對出現 保證每個都有 //用arr數組先處理下地圖 int arr[8 * 6] = { 0,0,0,0,0,0, 1,1,1,1,1,1, 2,2,2,2,2,2, 3,3,3,3,3,3, 4,4,4,4,4,4, 5,5,5,5,5,5, 6,6,6,6,6,6, 7,7,7,7,7,7 };//初始地圖 //把arr打亂之后放到這個map數組里面 //隨機數 srand((unsigned)time(NULL));//生成隨機數 隨機數種子 time.h int lenth = 48;//arr長度 int temp; //給map賦值 for (int i = 0; i < 8; i++) { for (int j = 0; j < 6; j++) { //隨機取出arr中的一個 賦給map[i][j] temp = rand() % lenth; map[i][j] = arr[temp];//取出的數字的話不能再用 //取出的數字放到后面 for (int k = temp; k < lenth - 1; k++) { arr[k] = arr[k + 1];//k+1<lenth } lenth--;//數組有效長度減一 } } win = 48;//記錄當前的圖片個數 //map被打亂了 按照map 貼圖 } void draw() { BeginBatchDraw(); //背景 --貼背景 putimage(0, 0, &img[8]); //再貼別的圖片 for (int i = 0; i < 8; i++) { for (int j = 0; j < 6; j++) { //遍歷數組 switch (map[i][j]) { case 0://貼第一張圖 putimage(80 * i, 80 * j, &img[0]); break; case 1:putimage(80 * i, 80 * j, &img[1]); break; case 2:putimage(80 * i, 80 * j, &img[2]); break; case 3:putimage(80 * i, 80 * j, &img[3]); break; case 4:putimage(80 * i, 80 * j, &img[4]); break; case 5:putimage(80 * i, 80 * j, &img[5]); break; case 6:putimage(80 * i, 80 * j, &img[6]); break; case 7:putimage(80 * i, 80 * j, &img[7]); break; } } } EndBatchDraw(); } int playgame() { //圖形庫的函數 //1.鼠標信息 MOUSEMSG msg;//存儲鼠標信息 msg = GetMouseMsg();//獲取鼠標信息 //根據鼠標位置 鼠標信息 switch (msg.uMsg) { case WM_LBUTTONDOWN: //msg.x msg.y 第一張圖片 0< msg.x <80 0<msg.y<80 //返回坐標值 map[msg.x / 80][msg.y / 80] ; //86-->map[8][6] return msg.x / 80 * 10 + msg.y / 80; //return msg.x/8+msg.y/80; //int 除法不保留小數 3/4 0 3/4*4=0 break; } return -1;//沒有獲取到值 } void play() { //獲取兩次鼠標點擊 1.兩次鼠標點擊都要有效 int point1, point2;//獲取到兩次鼠標點擊 while ((point1 = playgame()) == -1 || map[point1 / 10][point1 % 10] == -1);//獲取到一個坐標 //outtextxy(point1 / 10 * 80, point1 % 10 * 80, "get"); setlinecolor(RED); rectangle(point1 / 10 * 80, point1 % 10 * 80, point1 / 10 * 80 + 80, point1 % 10 * 80 + 80); //根據坐標判斷 //1.是不是獲取到了內容point1 = playgame() != -1 //2.是不是已經賦值的內容 map[point1 / 10][point1 % 10] != -1 //消掉的部分 =-1 while ((point2 = playgame()) == -1 || map[point2 / 10][point2 % 10] == -1); //加一條就可以 //可以消除或不可以消除 //可以消除 1.坐標不一樣 2.圖片一樣 if (point1 != point2 && map[point1 / 10][point1 % 10] == map[point2 / 10][point2 % 10]) { //連線部分 line(point1 / 10*80+30,point1 % 10*80+30,point2 / 10*80+30,point2 % 10*80+30);//連線 兩個坐標 Sleep(500);//500毫秒 map[point1 / 10][point1 % 10] = -1;//圖片和數組掛鉤 -1沒有對應的圖片 draw map[point2 / 10][point2 % 10] = -1; win -= 2;//消除部分 } else { //沒有消掉 } } void lo() { //alias song mciSendString("open 1.mp3 ", 0, 0, 0); mciSendString("play 1.mp3", 0, 0, 0); setbkmode(TRANSPARENT);//設置文字背景透明 settextcolor(LIGHTGRAY);//設置文字顏色 settextstyle(30, 0, "黑體"); char poem[2][9] = { "默然相愛","寂靜歡喜" }; //一個中文占兩字節 8個字節 考慮字符串 //兩只黃鸝鳴翠柳 你還沒有男朋友 /*outtextxy(0, 0, poem[0]); outtextxy(0, 30, poem[1]);*/ //文字一個個出現 循環做 每次輸出一個中文 //1.中文占兩個字節 不能char存儲 字符串 三個字節 char word[3];//保存一個中文字 for (int i = 0; i < 2; i++) { for (int j = 0; j < 9; j+=2) { word[0] = poem[i][j]; word[1] = poem[i][j + 1]; word[2] = ''; outtextxy(15* j+100,30*i,word); Sleep(200); if (poem[i][j + 2] == '') break; } } //彈窗內容 HWND hwnd = GetHWnd();//獲取當前窗口句柄 MessageBox(hwnd, "I Love You", "NAME", MB_OK); MessageBox(hwnd, "夏七", "制作人", MB_OK); } //======================= int main() { putimg(); init(); draw(); while (win!=0)//循環部分 { play(); draw();// 貼圖 } //表白部分 //一首詩 寫的句子 一個喜歡的人 //一段話 /*initgraph(640, 480); loadimage(NULL, "背景.jpg", 640, 480);*/ lo(); getchar(); return 0; }圖2圖3編譯工具的話,小編給個建議:開發工具 VS 2013 2015 (Vs2017不可以) VC 都可以
但是DEV C /GCC /CODEBLOCK 不可以,之所以vs2017不行,因為圖形庫還不支持。
額外需要的東西有1.圖形庫 easyx graphics.h 需要安裝 2.素材9張圖片
涉及到的知識點:
圖形庫的一些函數(注釋)
1.數組
2.if for 分支循環
3.函數
4.隨機數
轉載出處:
C語言+圖形庫打造--炫酷表白連連看游戲?www.toutiao.com學習從來不是一個人的事情,要有個相互監督的伙伴,工作需要學習C語言或者有興趣學習C語言的伙伴可以加我Q_2208165112。一起學習,一起進步。還有免費學習資料可以給各位伙伴總結
以上是生活随笔為你收集整理的c++语言表白超炫图形_教你用C语言加图形库打造炫酷表白连连看的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 模板格式丢失_公司法人私章证明丢失应该怎
- 下一篇: 7开启uasp协议_Dubbo-go 源