记忆游戏
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<windows.h>
#define N 10
int main( )
{int i,k,n,a[N],b[N],f=0
srand(time(NULL))
printf(" 按1开始\n 按0退出:_")
scanf("%d",&n)
system("cls")
while(n!=0)
{for(k=0k<Nk++)a[k] = rand( )%N
printf("\n\t\t[请您牢记看到颜色的顺序]\n\n")
for(k=0k<Nk++)
{switch(a[k])
{case 0:system("color 90")printf(" 0:淡蓝色\n")break //淡蓝色
case 1:system("color f0")printf(" 1:白色\n")break //白色
case 2:system("color c0")printf(" 2:淡红色\n")break //淡红色
case 3: system("color d0")printf(" 3:淡紫色\n")break //淡紫色
case 4: system("color 80")printf(" 4:灰色\n") break //灰色
case 5: system("color e0")printf(" 5:黄色\n")break //黄色
case 6: system("color 10")printf(" 6:蓝色\n") break //蓝色
case 7: system("color 20")printf(" 7:绿色\n")break //绿色
case 8: system("color 30")printf(" 8:浅绿色\n")break //浅绿色
case 9: system("color 40")printf(" 9:红色\n")break //红色
}
Sleep(1500)
system("color f") //单个控制 文字颜色
Sleep(100)
}
system("cls")
printf(" 0:淡蓝色,1:白色,2:淡红色,3:淡紫色,4:灰色,5:黄色,6:蓝色7:绿色,8:浅绿色,9:红色\n")
printf("\n\t请输入颜色的顺序:")
for(k=0k<Nk++)scanf("%d",&b[k])
for(k=0k<Nk++)if(a[k] == b[k]) f++
if(f==0) printf(" 你的记忆弱爆了0\n")
else if(f==1) printf(" 你的记忆有点弱1\n")
else if(f<5) printf(" 你的记忆一般<5\n")
else printf(" 你的记忆力很强!\n")
Sleep(2000)
system("cls")
printf("\t\t按0退出\n\t\t按任意键继续游戏:\n")
scanf("%d",&n)
system("cls")
}
return 0
}
注:DEVc++运行通过,每输入一个数字要加入一个空格。
DOS模式下的(文字游戏):#define SHITOU 0
#define JIANDAO 1
#define BU 2
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main()
{
int x,y
srand ((unsigned)time(NULL))
x = rand() % 3//随机生成0、1、2
printf ("该你出:0-石头,1-剪刀,2-布\n")
scanf ("%d", &y)
switch (x){
case SHITOU:
switch (y){
case SHITOU:
printf("电脑-石头,玩家-石头,平\n")
break
case JIANDAO:
printf("电脑-石头,玩家-剪刀,电脑赢\n")
break
case BU:
printf("电脑-石头,玩家-布,玩家赢\n")
break
}
break
case JIANDAO:
switch (y){
case SHITOU:
printf("电脑-剪刀,玩家-石头,玩家赢\n")
break
case JIANDAO:
printf("电脑-剪刀,玩家-剪刀,平\n")
break
case BU:
printf("电脑-剪刀,玩家-布,电脑赢\n")
break
}
break
case BU:
switch (y){
case SHITOU:
printf("电脑-布,玩家-石头,电脑赢\n")
break
case JIANDAO:
printf("电脑-布,玩家-剪刀,玩家赢\n")
break
case BU:
printf("电脑-布,玩家-布,平\n")
break
}
break
}
return 0
}
WINDOWS模式下的,用MFC写成(可视,但我不会画那些图案,只好用文字代替):
(PRS.h)
#define SHITOU 0
#define JIANDAO 1
#define BU 2
class CMyApp: public CWinApp
{
public:
virtual BOOL InitInstance ()
}
class CMainWindow: public CFrameWnd
{
protected:
int m_nPlayer
int m_nComputer
int m_nWinner
static CRect m_Buttons[3]
static CRect m_ViewPart[2]
static CRect m_Text[2]
public:
CMainWindow ()
protected:
int GetIndex(CPoint&point)
void Judge ()
void ComputerTurn()
void DrawGameText (CDC *pDC, int pos)
void DrawButton (CDC *pDC)
void DrawTittle (CDC *pDC)
protected:
afx_msg void OnPaint ()
afx_msg void OnLButtonDown (UINT nFlags, CPoint point)
DECLARE_MESSAGE_MAP()
}
(PRS.cpp)
#include <afxwin.h>
#include <stdlib.h>
#include <time.h>
#include "PRS.h"
CMyApp theApp
BOOL CMyApp::InitInstance ()
{
m_pMainWnd = new CMainWindow
m_pMainWnd->ShowWindow (m_nCmdShow)
m_pMainWnd->UpdateWindow()
return TRUE
}
BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd)
ON_WM_PAINT ()
ON_WM_LBUTTONDOWN ()
END_MESSAGE_MAP ()
CRect CMainWindow::m_Buttons[3] =
{
CRect (0, 540, 200, 600),
CRect (200, 540, 400, 600),
CRect (400, 540, 600, 600)
}
CRect CMainWindow::m_ViewPart[2] =
{
CRect (0, 200, 300, 540),
CRect (300, 200, 600, 540)
}
CRect CMainWindow::m_Text[2] =
{
CRect (0, 0, 300, 200),
CRect (300, 0, 600, 200)
}
CMainWindow::CMainWindow ()
{
CString strWnd = AfxRegisterWndClass (
CS_HREDRAW | CS_VREDRAW,
AfxGetApp () ->LoadStandardCursor (IDC_ARROW),
(HBRUSH)(COLOR_3DFACE + 1),
AfxGetApp () ->LoadStandardIcon (IDI_WINLOGO)
)
CreateEx (0, strWnd, _T("猜拳"),
WS_OVERLAPPED | WS_SYSMENU |
WS_CAPTION | WS_MINIMIZEBOX,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL)
CRect rect (0, 0, 600, 600)
CalcWindowRect (&rect)
SetWindowPos(NULL, 0, 0, rect.Width(), rect.Height(),
SWP_NOZORDER | SWP_NOMOVE | SWP_NOREDRAW)
}
void CMainWindow::OnPaint()
{
CPaintDC dc(this)
DrawTittle(&dc)
DrawButton(&dc)
CPen pen(PS_SOLID, 5, RGB(0, 255, 255))
CPen* pOldPen = dc.SelectObject (&pen)
dc.MoveTo (300, 200)
dc.LineTo (300, 480)
dc.SelectObject (pOldPen)
}
void CMainWindow::OnLButtonDown(UINT nFlags, CPoint point)
{
int i
i = GetIndex(point)
if (i == -1)
return
switch (i){
case SHITOU:
m_nPlayer = SHITOU
break
case JIANDAO:
m_nPlayer = JIANDAO
break
case BU:
m_nPlayer = BU
break
}
ComputerTurn()
Judge()
}
void CMainWindow::DrawTittle(CDC *pDC)
{
CFont font
font.CreatePointFont (300, _T("黑体"))
pDC->SetBkMode(TRANSPARENT)
CFont* pOldFont = pDC->SelectObject (&font)
pDC->DrawText (_T("电脑"), -1, &m_Text[0], DT_CENTER | DT_SINGLELINE | DT_VCENTER)
pDC->DrawText (_T("玩家"), -1, &m_Text[1], DT_CENTER | DT_SINGLELINE | DT_VCENTER)
pDC->SelectObject (pOldFont)
}
void CMainWindow::DrawButton(CDC *pDC)
{
CBrush brushes[3]
brushes[0].CreateSolidBrush(RGB(100, 60, 30))
brushes[1].CreateSolidBrush(RGB(20, 120, 90))
brushes[2].CreateSolidBrush(RGB(30, 80, 150))
for (int i = 0i<3i++){
pDC->Draw3dRect(&m_Buttons[i], RGB(255, 0, 0), RGB(0, 0, 255))
pDC->FillRect(&m_Buttons[i], &brushes[i])
}
CFont font
font.CreatePointFont(300, _T("黑体"))
pDC->SetBkMode (TRANSPARENT)
CFont* pOldFont = pDC->SelectObject(&font)
pDC->DrawText(_T("石"), -1, &m_Buttons[0], DT_VCENTER | DT_SINGLELINE | DT_CENTER)
pDC->DrawText(_T("剪"), -1, &m_Buttons[1], DT_VCENTER | DT_SINGLELINE | DT_CENTER)
pDC->DrawText(_T("布"), -1, &m_Buttons[2], DT_VCENTER | DT_SINGLELINE | DT_CENTER)
}
void CMainWindow::ComputerTurn()
{
srand((unsigned)time(NULL))
m_nComputer = rand()%3
}
void CMainWindow::Judge()
{
CClientDC dc(this)
CFont font
font.CreatePointFont (500, _T("黑体"))
dc.SetTextColor(RGB(255, 0, 0))
dc.SetBkMode (TRANSPARENT)
CFont* pOldFont = dc.SelectObject(&font)
switch(m_nComputer){
case SHITOU:
dc.DrawText(_T("石头"), &m_ViewPart[0], DT_CENTER | DT_VCENTER | DT_SINGLELINE)
dc.SetTextColor(RGB(0, 0, 255))
switch(m_nPlayer){
case SHITOU:
dc.DrawText(_T("石头"), &m_ViewPart[1], DT_CENTER | DT_VCENTER | DT_SINGLELINE)
m_nWinner = 0
break
case JIANDAO:
dc.DrawText(_T("剪刀"), &m_ViewPart[1], DT_CENTER | DT_VCENTER | DT_SINGLELINE)
m_nWinner = 1
break
case BU:
dc.DrawText(_T("布"), &m_ViewPart[1], DT_CENTER | DT_VCENTER | DT_SINGLELINE)
m_nWinner = 2
break
}
break
case JIANDAO:
dc.SetTextColor(RGB(255, 0, 0))
dc.DrawText(_T("剪刀"), &m_ViewPart[0], DT_CENTER | DT_VCENTER | DT_SINGLELINE)
dc.SetTextColor(RGB(0, 0, 255))
switch(m_nPlayer){
case SHITOU:
dc.DrawText(_T("石头"), &m_ViewPart[1], DT_CENTER | DT_VCENTER | DT_SINGLELINE)
m_nWinner = 2
break
case JIANDAO:
dc.DrawText(_T("剪刀"), &m_ViewPart[1], DT_CENTER | DT_VCENTER | DT_SINGLELINE)
m_nWinner = 0
break
case BU:
dc.DrawText(_T("布"), &m_ViewPart[1], DT_CENTER | DT_VCENTER | DT_SINGLELINE)
m_nWinner = 1
break
}
break
case BU:
dc.SetTextColor(RGB(255, 0, 0))
dc.DrawText(_T("布"), &m_ViewPart[0], DT_CENTER | DT_VCENTER | DT_SINGLELINE)
dc.SetTextColor(RGB(0, 0, 255))
switch(m_nPlayer){
case SHITOU:
dc.DrawText(_T("石头"), &m_ViewPart[1], DT_CENTER | DT_VCENTER | DT_SINGLELINE)
m_nWinner = 1
break
case JIANDAO:
dc.DrawText(_T("剪刀"), &m_ViewPart[1], DT_CENTER | DT_VCENTER | DT_SINGLELINE)
m_nWinner = 2
break
case BU:
dc.DrawText(_T("布"), &m_ViewPart[1], DT_CENTER | DT_VCENTER | DT_SINGLELINE)
m_nWinner = 0
break
}
break
}
switch(m_nWinner){
case 0:
MessageBox (_T("平局"), _T("Result"))
Invalidate()
break
case 1:
MessageBox (_T("电脑胜"), _T("Result"))
Invalidate()
break
case 2:
MessageBox (_T("玩家胜"), _T("Result"))
Invalidate()
break
}
}
int CMainWindow::GetIndex(CPoint &point)
{
register int i
for (i = 0i <3i++)
if (m_Buttons[i].PtInRect(point))
return i
return -1
}
# include<stdio.h># include <conio.h>
# include <graphics.h>
# include <time.h>
# pragma comment(lib,”Winmm.lib”) //引用Windows Multimedia APT
int score =0 //全局变量********整型的分数
char s[5] //全局变量****字符型的分数
struct player_ //自定义的结构体,并顺便定义一个结构体变量
{
char name[20]
int score_
}player[11]
/***************函数声明*****************/
void record_() //记录彼此成绩函数
void welcome( ) //欢迎界面函数
void instructions( ) //游戏说明界面函数
void gane (int rank2) //游戏函数
void record ( ) //显示记录函数
int rank_(char rank1) //等级选择函数
void goodbye ( ); //退出界面函数
/**************主函数**************/
int main ()
{
char rank1 //rank1接受从键盘输入的字符,根据字符判断等级
int rank2=15 // 控制延时时间,从而控制速度
intsign=1 // 当做标记,用于标记是否弹出MessageBox对话框
welcome ( ) //调用欢迎界面函数
instructions ( )//调用游戏什么函数
record( )//调用显示记录函数
InputBox(player[10].name,20,"请输入玩家昵称" //以对话框形式获取用户输入函数
rank1=getch()//读入一个字母
rank2=rank_(rank1)//调用等级函数
game (rank2)//调用游戏函数
HWND wnd =GetHWnd()
while (sign) //sign作为标记,执行循环
if (MessageBox(wnd,"游戏结束!!!\n再来一局,挑战更高分数","询问",MB_YESNO|MB_ICONQUESTION)==IDYES)
game (rank2)
else
{
sign=0
goodbye( )
}
closegraph( )
return 0
}
/***************记录本次成绩函数***************/
void record_()
{
FILE*fp //文件指针
int i,j
struct player_t //定义结构体变量t,冒泡法比较大小时用
player[10].score_=score //把该局的分数赋给该局用户的结构体变量中
fp=fopen("记录.dat","rb") //打开二进制文件
for (i=0i<10i++)
{
fread(player[i].name,20,l,fp) //读入记录中的成绩和名字
fread (&player[i].score_,4,l,fp)
}
fclose(fp) //关闭二进制文件
for (j=0j<10j++) //冒泡法排序
for (i=0i<10-ji++)
if (player[i].score_)
{
t=player[i]
player[i]=player[i+1]
player[i+1]=t
}
fp=fopen("记录.dat","wb") //打开文件
for (i=0i<10i++) //把排好序列的数据存入记录文件
{
fwrite(player[i].name,20,l,fp)
fwrite (&player[i].score_,4,l,fp)
}
fclose(fp) //关闭文件
}
/****************欢迎界面函数****************/
void welcome ( )
{
char ch
mciSendString("open\"res\\Sleep Away.mp3\"alias mymusic",NULL,0,NULL)
initgraph(640,480) //初始化画图界面
IMAGE img //定义IMAGE对象
loadimage (&img,"res\\00.jpg") //读取图片到img对象中
putimage (0,0,&img) //在坐标(0,0)位置显示IMAGE对象
ch=getch() //吸收掉一个按键
cleardevice() //清屏
}
/***************游戏说明界面函数**************/
void instructions()
{
int c=255 //控制变色的变量
setcolor(YELLOW) //设置颜色
setfont (30,0,"黑体") //设置字体
outtextxy(0,0,"游戏说明") //输出文字
setcolor(WHITE)
setfont(28,0,"宋体")
outtextxy(0,30,"一、每次游戏下落200个字母") //输出文字
outtextxy(0,58,"二、请按数字键选择游戏等级")
outtextxy(0,86,"三、统计被击中的个数")
setfont(30,0,"华文行楷")
outtextxy (20,220,"等级一二三四 五六七八九")
outtextxy(20,260,“按键 1 2 3 4 5 6 7 8 9”);
while (!kbhit()) //kihit()作用是判断是否有字幕输入
{
setcolor(RGB(c,255,0))
setfont (80,0,"楷体")
outtextxy(140,130,"请选择等级")
setcolor(RGB(c,0,255))
setfont(100,0,"Wickenden Cafe NDP")
outtextxy(100,135,"Let's go!!!")
c-=25 //控制颜色的变量自减
if(c<0)c=255 //控制颜色的变量小于0时,再把255赋给c
cleardevice() //清屏
}
/***************退出界面函数***************/
void goodbye()
{
int c=255 //控制变色变量
cleardevice() //清屏
setcolor(YELLOW)
setfont (48,0,"黑体")
outtextxy (104,120,"的最终成绩是: ")
setfont (48,0,"华文楷体")
setcolor(RGB(255,255,0))
outtextxy(140,320,"按任意键退出游戏")
setcolor(YELLOW)
setfont(48,0,"黑体")
outtextxy (104,120,"的最终成绩是: ")
outtextxy(104,70,player[10].name)
record_() //调用记录本次成绩函数
while(!kbhit())
{
setcolor(RGB(255,0,c-100)) //设置颜色
setfont(100,0,”Wickenden Café NDP”)
outtextxy(400,90,s) //输出数字
setcolor(RGB(c,0,255))
setfont(48,0,”黑体”)
if (score==200)
outtextxy(100,200,”全部击中!!!”)
else
if(score>190)
outtextxy(100,200,”不错!继续加油!”);
else
outtextxy(100,200,”不要灰心!继续加油!”);
c-=25
if(c<0)
c=255
Sleeep(20) //延时20秒
}
getch( ) //提供给用户时需要等待输入后再退出
}
/**************等级选择函数**************/
int rank_(char rank1)
{
int rank2
switch(rank1) //判断字符,确定等级
{
case’0’:rank2=11break
case’1’:rank2=10break
case’2’:rank2=9break
case’3’:rank2=8break
case’4’:rank2=7break
case’5’:rank2=6break
case’6’:rank2=5break
case’7’:rank2=4break
case’8’:rank2=3break
case’9’:rank2=2break
default:rank2=15break
}
return rank2
}
/**************显示记录函数***********/
void record( )
{
FILE *p //文件指针
int a[10],j
char b[10][10]
fp=fopen(“记录。dat”,”rb”) //打开文件
for (j=0j<10j++)
{
fread(player[j].name,20,1,fp) //读取文件中的信息
fread(&player[j].score_,4,1,fp)
}
fclose(fp) //关闭文件
setfont(60,0,”Arial”)
setcolor(RGB(250,250,0))
outtextxy(250,0,”TOP10”)
for(j=0j<10j++)
{
sprintf(“b[j],%d”,player[j].score_) //把整型转换为字符型
setcolor(RGB(0,100,255))
setfont(40,0,”Arial”)
outtextxy(420,50+40*j,b[j])
outtextxy(120,50+40*j,player[j].name) //输出名字
/**********游戏函数******************/
void game (int rank2)
{
cleardevice( ) //清屏
score=0 //清除掉原有的分数
outtextxy(0,0,”玩家:”);
outtextxy(90,0,player[10].name)
setfont(20,0,”Arial”)
outtextxy(100,460,” 人生有享受片刻优雅恬适的权力,让打字母游戏放松你一下吧!”);
int i;
char target //目标字母
char key //用户的按键
intx,y //字母的位置
int flag =1 //标记是否按了退出键
int sum=0 //成绩计数
int num =200 //规定下落字母的个数
srand (time(NULL)) //随机时间种子,设置第一个随机函数的值
setfillstyle(BLACK) //设置下面矩形内图的颜色
setcolor(YELLOW) //
line(0,450,640,450) //用3条线规定一下工作区
line(0,440,640,440) //用3条线规定一下工作区
line(0,40,640,40) //用3条线规定一下工作区
while (flag&&num)
{
setfont(40,0,”宋体”); //设置字母的字体和大小
i=rand()%2 //rand()函数返回0~32767之间的一个整数
if(i)
target=97+rand()%26 //产生任意小写字母
else
target=65+rand()%26 //产生任意大写字母
x=rand()%610 //产生任意下落位置
for (y=41y<380y++)
{
setcolor (RGB(255,0,255))
outtextxy(x,y,target) //显示字母
if(kbhit())
{
key=getch() //获取用户按键
if ((key==target)||( key==target-32)||( key==target+32))
{
score++ //分数统计
sprintf(s,”%d”score)
setfont(30,0,”Arial”)
outtextxy(500,0,“分数”)
outtextxy(600,0,s) //输出分数
bar(x-10,y-10,x+35,y+50) // 击中用黑框形擦去字母
break //跳出循环,进行下一个字母
}
else if (key==27) //判断是否按了
{
flag=0 //若果按ESC,退出游戏主循环
break
}
}
Sleep(rank2) //控制清除字母的时间爱你也就是控制下落速度
bar(x,y,x+35,y+60) //擦最下面的字符
}
num-- //计数
}
}