C++实现猜牌小游戏

所属分类: 软件编程 / C 语言 阅读数: 83
收藏 0 赞 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\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经典小游戏汇总

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

更多精彩内容其他人还在看

C++无法重载点符号、::、sizeof等的原因

这篇文章主要介绍了C++无法重载点符号、::、sizeof等的原因的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

实例讲解C语言编程中的结构体对齐

这篇文章主要介绍了C语言编程中的结构体对齐,值得注意的是一些结构体对齐的例子在不同编译器下结果可能会不同,需要的朋友可以参考下
收藏 0 赞 0 分享

详解C语言的结构体中成员变量偏移问题

这篇文章主要介绍了C语言的结构体中成员变量偏移问题,以讲解如何编写宏来对成员变量进行修改为主,需要的朋友可以参考下
收藏 0 赞 0 分享

详解C语言结构体中的函数指针

这篇文章主要介绍了详解C语言结构体中的函数指针,文中对函数指针的基本概念也有讲解,需要的朋友可以参考下
收藏 0 赞 0 分享

C++编程中的函数指针初步解析

这篇文章主要介绍了C++编程中的函数指针初步解析,函数指针在C语言和C++学习中都是非常重要的知识,需要的朋友可以参考下
收藏 0 赞 0 分享

实例解析C++中类的成员函数指针

这篇文章主要介绍了C++中类的成员函数指针,例子中以讨论用函数指针调用类的成员函数为主,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言中的函数指针基础学习教程

这篇文章主要介绍了C语言中的函数指针基础学习教程,包括函数指针作为参数来传递等重要知识,需要的朋友可以参考下
收藏 0 赞 0 分享

深入解析C语言中函数指针的定义与使用

这篇文章主要介绍了C语言中函数指针的定义与使用,是C语言入门学习中的基础知识,需要的朋友可以参考下
收藏 0 赞 0 分享

详解C语言编程中的函数指针以及函数回调

这篇文章主要介绍了C语言编程中的函数指针以及函数回调,函数回调实际上就是让函数指针作函数参数、调用时传入函数地址,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言中的函数指针学习笔记

这篇文章主要介绍了C语言中的函数指针的一些学习知识点记录,文中作者整理了一些比较interesting的函数指针用法,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多