歡迎您光臨本站 註冊首頁

C++實現猜牌小遊戲

←手機掃碼閱讀     zmcjlove @ 2020-07-06 , reply:0

這是大一的時用C寫的猜牌小遊戲,裡面用了easyx圖形庫,供大家參考,具體內容如下

運行效果

代碼

  #include<stdio.h>  #include<time.h>  #include<stdlib.h>  #include<Windows.h>  #include<graphics.h>  #include<mmsystem.h>   #pragma comment(lib,"winmm.lib")  #define HANG 4  #define LIE 4  #define SIZE 200    int g_matt[HANG][LIE] = { 0 };  int g_matt_time[HANG][LIE] = { 0 };  int g_matt_mask[HANG*LIE] = { 0 };  IMAGE img[10];    void Put(){   char jpg[50];   for (int i = 0; i <10; i++){    sprintf(jpg, "images\%d.jpg", i);   loadimage(&img[i], jpg, SIZE, SIZE);   //printf("%s ", jpg);   }  }    int getNextNumber()  {   char stat[8] = { 0 };   for (int i = 0; i < HANG; i++){   for (int j = 0; j < LIE; j++){    if (g_matt[i][j]>0 && g_matt[i][j]<9)//讓數組裡面的數不能重複出現3次    stat[g_matt[i][j]-1]++;//    //printf("%c", stat);   }   }   char n = 0;   while (1) {   n = rand() % 8 + 1;//隨機1到8   if (stat[n-1] >= 2) {//判斷這個數組 裡面不能出現2個以上重複的1到8    continue;   } else {    break;   }   }      return n;  }    void Playone(){   for (int i = 0; i < HANG; i++){   for (int j = 0; j < LIE; j++){    g_matt[i][j] = getNextNumber();    printf("%d ", g_matt[i][j]);   }   printf(" ");   }   for (int i = 0; i < HANG; i++){   for (int j = 0; j < LIE; j++){    if (g_matt[i][j] >= 1 && g_matt[i][j] <= 8)    g_matt[i][j] += 20;    printf("%d ", g_matt[i][j]);   }   printf(" ");   }      }    void Plus(){        for (int i = 0; i < HANG; i++){   for (int j = 0; j < LIE; j++){    if (g_matt[i][j] == 1){    putimage(i*SIZE, j*SIZE, &img[1]);    }    else if (g_matt[i][j] == 2){    putimage(i*SIZE, j*SIZE, &img[2]);    }    else if (g_matt[i][j] == 3){    putimage(i*SIZE, j*SIZE, &img[3]);    }    else if (g_matt[i][j] == 4){    putimage(i*SIZE, j*SIZE, &img[4]);    }    else if (g_matt[i][j] == 5){    putimage(i*SIZE, j*SIZE, &img[5]);    }    else if (g_matt[i][j] == 6){    putimage(i*SIZE, j*SIZE, &img[6]);    }    else if (g_matt[i][j] == 7){    putimage(i*SIZE, j*SIZE, &img[7]);    }    else if (g_matt[i][j] == 8){    putimage(i*SIZE, j*SIZE, &img[8]);    }    else if (g_matt[i][j] >= 20 && g_matt[i][j] <= 28){    putimage(i*SIZE, j*SIZE, &img[0]);    }    else if (g_matt[i][j] > 100){    putimage(i*SIZE, j*SIZE, &img[9]);    }   }   }  }    void Play(){   MOUSEMSG msg = { 0 };   msg = GetMouseMsg();   //if (WM_LBUTTONDOWN == matt[msg.x][msg.y] >= 20 || matt[msg.x][msg.y]<=28){   switch (msg.uMsg)   {      case WM_LBUTTONDOWN:   {    int row = msg.y / SIZE;    int col = msg.x / SIZE;    if (g_matt[col][row] >= 20 && g_matt[col][row] <= 28){        g_matt[col][row] -= 20;    //printf("%d ", g_matt[col][row]);    }    //mciSendString("open imagesclick.wav", NULL, NULL, NULL);    mciSendString("play imagesclick.wav", NULL, NULL, NULL);    Sleep(10);    mciSendString("cloes imagesclick.wav", NULL, NULL, NULL);   }   }       //cleardevice();  }    void Over(){   int *p = (int*)g_matt+1;   for (int i = 0; i < HANG*LIE; i++) {   for (int j = i + 1; j < HANG*LIE; j++) {        if(p[i] <= 8 && p[i] >= 1 && p[i] == p[j]){    p[i] += 120;    p[j] += 120;    //mciSendString("open imagessearch.wav", NULL, NULL, NULL);    mciSendString("play imagessearch.wav", NULL, NULL, NULL);    Sleep(10);    mciSendString("cloes imagessearch.wav", NULL, NULL, NULL);    }   }   }  }    void Keep(){   for (int i = 0; i < HANG; i++){   for (int j = 0; j < LIE; j++){    if (g_matt[i][j] >= 1 && g_matt[i][j] <= 8){    g_matt[i][j] += 20;    //printf("%d ", g_matt[i][j]);    }   }     printf(" ");   }  }    int main() {   //int *p1;   mciSendString("open images東京不太熱.mp3", NULL, NULL, NULL);   mciSendString("play images東京不太熱.mp3", NULL, NULL, NULL);   srand(time(NULL));   HWND hwnd =initgraph(800, 800);   Put();   Playone();   int frames = 0;   DWORD t1, t2,t3;     t1 = GetTickCount();//程序運行時間        while (1)   {    t2 = GetTickCount();      Plus();//貼圖   Play();//鼠標點擊   if (t2-t1>=1600){//等於當前時間減去程序運行時間大於等於兩秒才運行 也就是卡兩秒    Keep();//加密        //continue;    t1 = t2;//當前時間賦給程序運行時間   }   Over();      char ch[16] = { 0 };   char n = 0;   for (int i = 0; i < HANG; i++){    for (int j = 0; j < LIE; j++){    if (g_matt[i][j] >= 120){     ch[g_matt[i][j] - 1]++;    }    }   }   while (n>6) {    if (ch[n - 1] >= 6) {//判斷這個數組 裡面不能出現2個以上重複的1到8    MessageBox(hwnd, "恭喜你贏了", "", MB_OK);    //continue;    n++;    }   }     }       return 0;  }

 


                                                       

   


[zmcjlove ] C++實現猜牌小遊戲已經有301次圍觀

http://coctec.com/docs/c/language/show-post-241478.html