当前位置 : 主页 > 编程语言 > c语言 >

C++实现猜牌小游戏

来源:互联网 收集:自由互联 发布时间:2021-05-10
这是大一的时用C写的猜牌小游戏,里面用了easyx图形库,供大家参考,具体内容如下 运行效果 代码 #includestdio.h#includetime.h#includestdlib.h#includeWindows.h#includegraphics.h#includemmsystem.h #pragma c

这是大一的时用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\n", 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("\n");
 }
 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("\n");
 }
 
 }

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 images\\click.wav", NULL, NULL, NULL);
  mciSendString("play images\\click.wav", NULL, NULL, NULL);
  Sleep(10);
  mciSendString("cloes images\\click.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 images\\search.wav", NULL, NULL, NULL);
  mciSendString("play images\\search.wav", NULL, NULL, NULL);
  Sleep(10);
  mciSendString("cloes images\\search.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("\n");
 }
}

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;
}

更多有趣的经典小游戏实现专题,分享给大家:

C++经典小游戏汇总

python经典小游戏汇总

python俄罗斯方块游戏集合

JavaScript经典游戏 玩不停

java经典小游戏汇总

javascript经典小游戏汇总

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

网友评论