这是大一的时用C写的猜牌小游戏,里面用了easyx图形库,供大家参考,具体内容如下
运行效果
代码
#include
#include
#include
#include
#include
#include
#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经典小游戏汇总
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持猪先飞。