/* Note:Your choice is C IDE */
#define VERSION "Version 1.0"
#define F 0 /* Front face 前面 */
#define R 1 /* Right face 右面 */
#define T 2 /* Top face 上面 */
#define H 3 /* beHind face后面 */
#define L 4 /* Left face 左侧面 */
#define B 5 /* Bottom face 下面 */
#define RR 0 /* Red 红 */
#define OO 1 /* Orange 橙 */
#define GG 2 /* Green 绿 */
#define BB 3 /* Blue 蓝 */
#define YY 4 /* Yellow 黄 */
#define WW 5 /* White 白 */
#define SRIMN 8 /* 最小边缘数 */
#define BRIMN 8 /* 最大边缘数 */
#define CW -1 /* clockwise 顺时针 */
#define CCW -2 /* counterclockwise 逆时针 */
#define ESC 27 /* Esc的键值 */
#define F1 59
#define F2 60
#define F3 61
#define F4 62
#define F5 63
#define F6 64
#define ON 1
#define OFF 0
#include <stdio.h>
#include <dos.h>
#include <alloc.h>
#include <ctype.h>
#include <conio.h>
#include <stdlib.h>
#include <graphics.h>
#include "mouse.h"
void body(char);
char getmousech(MOUSE *);
void to_graphic_mode(void);
void initialize(void);
void handle(char);
void faceCW(char);
coid faceCCW(char);
int cond(char);
void reassignfacestruct(char);
void showcube(void);
void cube_rotate(char,int);
void savegame(void);
void loadgame(void);
void soundswitch(void);
void speedswitch(void);
void word(void);
void title(void);
void draw_win(void);
void sink(int,int,int,int,int);
void mem_error(void);
void file_error(void);
void show_versinon(int,int,int);
void palette(int);
void shell(void);
void clr_kb_buff(void);
void sinkkey(char);
void help(void);
void message(int,char *);
void cubesound(void);
int first=0; /* 检查是不是第一次绘制魔方画面 */
int speed=30; /* 设置魔方旋转速度 */
int speeddata[]={10,30,50}; /* 这是快、正常、慢时的值 */
int speedcontrol=1; /* 控制速 */
MOUSE mouse; /* 定义鼠标变量 */
int soundflag=ON; /* 声音开关标记,初值为ON */
int mu_install=OFF; /* 鼠标使用标记,初值为OFF */
int sq[49]; /* 魔方方块的颜色 */
int condition[]={RR,BB,YY,OO,GG,WW}; /* 分别对应F、R、T、H、L、B */
int now=0,next=0;
int color[]={GREEN,LIGHTRED,RED,DARKGRAY,LIGHTGRAY,WHITE};
/* 定义魔方六个面的结构 */
struct one_face
{
int *srim[SRIMN+1];
int *brim[SRIMN+1];
}face[]=
{
{ NULL,&sq[1],&sq[2],&sq[3],&sq[4],&sq[5],&sq[6],&sq[7],
&sq[8],NULL,&sq[39],&sq[38],&sq[37],&sq[25],&sq[32],
&sq[31],&sq[47],&sq[46],&sq[45],&sq[21],&sq[20],&sq[19]
},
{ NULL,&sq[9],&sq[10],&sq[11],&sq[12],&sq[13],&sq[14],&sq[15],
&sq[16],NULL,&sq[35],&sq[34],&sq[33],&sq[17],&sq[24],
&sq[23],&sq[43],&sq[42],&sq[41],&sq[29],&sq[28],&sq[27]
},
{ NULL,&sq[17],&sq[18],&sq[19],&sq[20],&sq[21],&sq[22],&sq[23],
&sq[24],NULL,&sq[33],&sq[40],&sq[39],&sq[1],&sq[8],
&sq[7],&sq[45],&sq[44],&sq[43],&sq[13],&sq[12],&sq[11]
},
{ NULL,&sq[25],&sq[26],&sq[27],&sq[28],&sq[29],&sq[30],&sq[31],
&sq[32],NULL,&sq[37],&sq[36],&sq[35],&sq[9],&sq[16],
&sq[15],&sq[41],&sq[48],&sq[47],&sq[5],&sq[4],&sq[3]
},
{ NULL,&sq[33],&sq[34,&sq[35],&sq[36],&sq[37],&sq[38],&sq[39],
&sq[40],NULL,&sq[11],&sq[10],&sq[9],&sq[27],&sq[26],
&sq[25],&sq[3],&sq[2],&sq[1],&sq[19],&sq[18],&sq[17]
},
{ NULL,&sq[41],&sq[42],&sq[43],&sq[44],&sq[45],&sq[46],&sq[47],
&sq[48],NULL,&sq[15],&sq[14],&sq[13],&sq[23],&sq[22],
&sq[21],&sq[7],&sq[6],&sq[5],&sq[31],&sq[320],&sq[29]
}
};
struct condition_data
{
int face[6];
int lefttop[3];
int cw[3][2];
int ccw[3][2];
}conddata[]=
{
{RR,BB,YY,OO,GG,WW,1,1,1, WW,BB,RR,YY,BB,OO, YY,BB,RR,WW,GG,RR},
{RR,WW,BB,OO,YY,GG,3,7,3, GG,WW,RR,BB,WW,OO, BB,WW,RR,GG,YY,RR},
{RR,GG,WW,OO,BB,YY,5,5,1, YY,GG,RR,WW,GG,OO, WW,GG,RR,YY,BB,RR},
{RR,YY,GG,OO,WW,BB,7,7,7, BB,YY,RR,GG,YY,OO, GG,YY,RR,BB,WW,RR},
{OO,GG,YY,RR,BB,WW,1,1,5, WW,GG,OO,YY,GG,RR, YY,GG,OO,WW,BB,OO},
{OO,WW,GG,RR,YY,BB,3,3,3, BB,WW,OO,GG,WW,RR, GG,WW,OO,BB,YY,OO},
{OO,BB,WW,RR,GG,YY,5,5,5, YY,BB,OO,WW,BB,RR, WW,BB,OO,YY,GG,OO},
{OO,YY,BB,RR,WW,GG,7,3,7, GG,YY,OO,BB,YY,RR, BB,YY,OO,GG,WW,OO},
{GG,YY,OO,BB,WW,RR,7,1,7, RR,YY,GG,OO,YY,BB, OO,YY,GG,RR,WW,GG},
{GG,RR,YY,BB,OO,WW,1,1,3, WW,RR,GG,YY,RR,BB, YY,RR,GG,WW,OO,GG},
{GG,WW,RR,BB,YY,OO,3,5,3, OO,WW,GG,RR,WW,BB, RR,WW,GG,OO,YY,GG},
{GG,OO,WW,BB,RR,YY,5,5,7, YY,OO,GG,WW,OO,BB, WW,OO,GG,YY,RR,GG},
{BB,OO,YY,GG,RR,WW,1,1,7, WW,OO,BB,YY,OO,GG, YY,OO,BB,WW,RR,BB},
{BB,WW,OO,GG,YY,RR,3,1,3, RR,WW,BB,OO,WW,GG, OO,WW,BB,RR,YY,BB},
{BB,RR,WW,GG,OO,YY,5,5,3, YY,RR,BB,WW,RR,GG, WW,RR,BB,YY,OO,BB},
{BB,YY,RR,GG,WW,OO,7,5,7, OO,YY,BB,RR,YY,GG, OO,YY,BB,OO,WW,BB},
{YY,BB,OO,WW,GG,RR,1,3,5, RR,BB,YY,OO,BB,WW, OO,BB,YY,RR,GG,YY},
{YY,RR,BB,WW,OO,GG,3,3,5, GG,RR,YY,BB,RR,WW, BB,RR,YY,GG,OO,YY},
{YY,GG,RR,WW,BB,OO,5,3,5, OO,GG,YY,RR,GG,WW, RR,GG,YY,OO,BB,YY},
{YY,OO,GG,WW,RR,BB,7,3,5, BB,OO,YY,GG,OO,WW, GG,OO,YY,BB,RR,YY},
{WW,GG,OO,YY,BB,RR,1,7,1, RR,GG,WW,OO,GG,YY, OO,GG,WW,RR,BB,WW},
{WW,RR,GG,YY,OO,BB,3,7,1, BB,RR,WW,GG,RR,YY, GG,RR,WW,BB,OO,WW},
{WW,BB,RR,YY,GG,OO,5,7,1, OO,BB,WW,RR,BB,YY, RR,BB,WW,OO,GG,WW},
{WW,OO,BB,YY,RR,GG,7,7,1, GG,OO,WW,BB,OO,YY, BB,OO,WW,GG,RR,WW}
};
/* 初始化可看到的面即前、右和上面的颜色 */
struct vfacedata
{
int color[8];
}vface[]=
{
{GREEN,GREEN,GREEN,GREEN,GREEN,GREEN,GREEN,GREEN},
{DARKGRAY,DARKGRAY,DARKGRAY,DARKGRAY,DARKGRAY,DARKGRAY,
DARKGRAY,DARKGRAY},
{LIGHTGRAY,LIGHTGRAY,LIGHTGRAY,LIGHTGRAY,LIGHTGRAY,LIGHTGRAY,
LIGHTGRAY,LIGHTGRAY}
};
/* 定义鼠标可移动区域和相应的键值 */
struvt mu_click
{
int cl,ct,cr,cb; /* left,top,right,bottom,即鼠标的左、上、右、下的区域 */
char key; /* 区域内相应键值 */
}def_click[]=
{
{ 18+(65+1)*0,253, 18+(65+1)*0+64, 253+44, 'f'},
{ 18+(65+1)*1,253, 18+(65+1)*1+64, 253+44, 'r'},
{ 18+(65+1)*2,253, 18+(65+1)*2+64, 253+44, 't'},
{ 18+(65+1)*3,253, 18+(65+1)*3+64, 253+44, 'l'},
{ 18+(65+1)*4,253, 18+(65+1)*4+64, 253+44, 'b'},
{ 18+(65+1)*5,253, 18+(65+1)*5+64, 253+44, 'h'},
{ 426+(65+1)*0,253, 426+(65+1)*0+64, 253+44,'x'},
{ 426+(65+1)*1,253, 426+(65+1)*1+64, 253+44,'z'},
{ 426+(65+1)*2,253, 426+(65+1)*2+64, 253+44,'y'},
{ 18+(65+1)*0,253+46, 18+(65+1)*0+64, 253+44+46, 'F'},
{ 18+(65+1)*1,253+46, 18+(65+1)*1+64, 253+44+46, 'R'},
{ 18+(65+1)*2,253+46, 18+(65+1)*2+64, 253+44+46, 'T'},
{ 18+(65+1)*3,253+46, 18+(65+1)*3+64, 253+44+46, 'L'},
{ 18+(65+1)*4,253+46, 18+(65+1)*4+64, 253+44+46, 'B'},
{ 18+(65+1)*5,253+46, 18+(65+1)*5+64, 253+44+46, 'H'},
{ 426+(65+1)*0,253+46, 426+(65+1)*0+64, 253+44+46, 'X'},
{ 426+(65+1)*1,253+46, 426+(65+1)*1+64, 253+44+46, 'Z'},
{ 426+(65+1)*2,253+46, 426+(65+1)*2+64, 253+44+46, 'Y'},
{526,62+(21+7)*0,526+80,62+(21+7)*0+20,F2},
{526,62+(21+7)*1,526+80,62+(21+7)*1+20,F3},
{526,62+(21+7)*2,526+80,62+(21+7)*2+20,F4},
{526,62+(21+7)*3,526+80,62+(21+7)*3+20,F5},
{526,62+(21+7)*4,526+80,62+(21+7)*4+20,F6}
};
/***********main()*********/
void main(void)
{
int i;
char ch=0;
#ifndef _LARGE_
clrscr();
prinf("\n\nNeeds to compile in Large Model.\n");
exit(1);
#endif
if(strcmp(getenv("HAVE_CUBE"),"YES")==0)
{
printf("\nMagic Cube has already executed!\n");
printf("Type EXIT to return to Magic Cube...\n");
exit(1);
}
to_graphic_mode();
initialize();
word();
setactivepage(0);
setvisualpage(0);
title();
draw_win();
setactivepage(1);
draw_win();
/* 给魔方块分配颜色 */
for(i=1;i<=48;i++)
sq[i]=color[(int)(i-1)/8];
body(ch);
showcube();
clr_kb_buff();
while(ch!=ESC)
{
ch=-1;
if(!kbhit())
{
if(click_button(&mouse,LEFT_B))
ch=getmousech(&mouse);
}
else
ch=getch();
handle(ch);
if(ch!=-1)
body(ch);
}
closegraph();
}
/*******************End of main()******************/
/* 初始化图形函数 */
void to_graphic_mode(void)
{
int gdriver=DETECT,gmode,gcode;
registerbgidriver(E
没有合适的资源?快使用搜索试试~ 我知道了~
C语言写的一个魔方游戏
共4个文件
c:3个
h:1个
需积分: 10 18 下载量 81 浏览量
2008-11-02
18:41:12
上传
评论 1
收藏 11KB RAR 举报
温馨提示
对刚学C的很有帮助。 #define F 0 /* Front face 前面 */ #define R 1 /* Right face 右面 */ #define T 2 /* Top face 上面 */ #define H 3 /* beHind face后面 */ #define L 4 /* Left face 左侧面 */ #define B 5 /* Bottom face 下面 */ #define RR 0 /* Red 红 */ #define OO 1 /* Orange 橙 */ #define GG 2 /* Green 绿 */ #define BB 3 /* Blue 蓝 */ #define YY 4 /* Yellow 黄 */ #define WW 5 /* White 白 */ #define SRIMN 8 /* 最小边缘数 */ #define BRIMN 8 /* 最大边缘数 */ #define CW -1 /* clockwise 顺时针 */ #define CCW -2 /* counterclockwise 逆时针 */ #define ESC 27 /* Esc的键值 */
资源推荐
资源详情
资源评论
收起资源包目录
.rar (4个子文件)
例8-2 魔方游戏
mouse.h 682B
cube2.c 8KB
mouse.c 11KB
cube1.c 21KB
共 4 条
- 1
资源评论
孤飞俊驰
- 粉丝: 35
- 资源: 38
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功