扑克记牌训练方法如下:
步骤一、给扑克牌编码。
(1)四种花色的J、Q、K共12张为“人物牌”,每人按自己的喜好找出相应人物代替。建议黑桃、草花用男性人物,红桃、方片用女性人物,比如说方片J是西施,黑桃Q是刘备……
(2)其余的40张为“数字牌”,用数字编码来代替,规则为:
黑桃代表十位数的1(黑桃的下半部分像“1”)。
红桃代表十位数的2(红桃的上半部分是两个半圆的弧形)。
草花代表十位数的3(草花由三个半圆组成)。
方片代表十位数的4(方片有4个尖角)。
(3)根据数字谐音/形状/个人喜好给每个数字编码,比如说数字10形状能让人想到棒球,我们就给“10”编码“棒球。
步骤二、建立定位系统。
在大脑中建立一套固定的有序的定位系统,在记忆新知识的时候,通过联想和想象,把知识按顺序储存在与其相对应的定位元素上。
步骤三、将编码与地点联系,编成故事。
记忆的时候,在每个地点上放2张牌,把这2张牌代表的图像与地点进行紧密的联结,26个地点刚好放下52张牌(除大小王)。
编故事的时候,第一张必须有动作,第二张牌必须是第一张牌的宾语,回忆的时候,把这26个地点在大脑中过一遍,就能快速地回想起相应的52张牌。
我曾经用c语言写了一个,不过还不够完善,你可以看下。牌的规则是:由大及小:7 王 5 2 3 A K Q J 10 9 8 6 4 黑桃>梅花>红桃>方块,
/*扑克游戏之七王五二三*/
/*作者:翁家祥*/
/*日期:2005/04/02*/
#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
struct CARD
{
char suit
char face[10]
int flag/*用来标志牌的大小及是否已出*/
}
typedef struct CARD puke
puke card[54],a[5],b[5]
int point=0,tag=3/*前者标记牌已抽了几张;后者标记出一局后谁大*/
int s1=0,s2=0/*判断输赢*/
void riffle(void)
{
char Suit[4]={"\4\3\5\6"}
char *Face[]={"4","6","8","9","10","Jack","Queen","King","A","3","2","5","7"}
int i,j
puke temp
strcpy(card[53].face,"BigJoke")
card[53].suit=' '
strcpy(card[52].face,"SmallJoke")
card[52].suit=' '
card[52].flag=49
card[53].flag=50
for(i=0i<52i++)
{
card[i].suit=Suit[i%4]
strcpy(card[i].face,Face[i/4])
if(i<48)
card[i].flag=i+1
else
card[i].flag=i+3
}
srand(time(NULL))
for(i=0i<54i++)
{
j=rand()%54
temp=card[i]
card[i]=card[j]
card[j]=temp
}
}
void display(void)
{
int i,j,counter=1
if(point==0)
{
for(i=0i<10i++)
{
if((i%2)==0)
a[i/2]=card[point++]
else
b[(i-1)/2]=card[point++]
}
}
if(point>0)
{
if(tag==0)/*表示playeer大,故先抽牌*/
{
for(j=0j<5&&point<54j++)
if(a[j].flag==0)
a[j]=card[point++]
for(i=0i<5&&point<54i++)
if(b[i].flag==0)
b[i]=card[point++]
}
else if(tag==1) /*表示computer大,故先抽牌*/
{
for(i=0i<5&&point<54i++)
if(b[i].flag==0)
b[i]=card[point++]
for(j=0j<5&&point<54j++)
if(a[j].flag==0)
a[j]=card[point++]
}
}
for(i=0i<5i++)
{
if(a[i].flag==0)
continue
else
{
printf("%c%10s%30d\n",a[i].suit,a[i].face,i+1)
}
}
if(point<11)
printf("The five cards above are yours.\n")
}
int finger_guess(void)
{
char ch
char artificial
int random
int p=0
while (p==0)
{
srand(time(NULL))
printf("Please input one case you want to put:\n(A/a:stoneB/b:clothC/c:forfex)\n")
artificial=getch()
if(artificial!='A'&&artificial!='B'&&artificial!='C'&&artificial!='a'&&artificial!='b'&&artificial!='c')
continue
if(artificial=='A'||artificial=='a')
printf("You put out stone.\n")
if(artificial=='B'||artificial=='b')
printf("You put out cloth.\n")
if(artificial=='C'||artificial=='c')
printf("You put out forfex.\n")
random=rand()%3+1
switch(random)
{
case 1:
printf("I put out stone.\n")
if(artificial=='A'||artificial=='a')
{
printf("Ah,We are the same.\n")
continue
}
if(artificial=='B'||artificial=='b')
{
p=1
return 1
}
if(artificial=='C'||artificial=='c')
{
p=1
return 0
}
case 2:
printf("I put out cloth.\n")
if(artificial=='B'||artificial=='b')
{
printf("Ah,We are the same.\n")
continue
}
if(artificial=='C'||artificial=='c')
{
p=1
return 1
}
if(artificial=='A'||artificial=='a')
{
p=1
return 0
}
case 3:
printf("I put out forfex.\n")
if(artificial=='C'||artificial=='c')
{
printf("Ah,We are the same.\n")
continue
}
if(artificial=='B'||artificial=='b')
{
p=1
return 0
}
if(artificial=='A'||artificial=='a')
{
p=1
return 1
}
}
}
}
void EXIT(void)
{
if(s1==5)
printf("Ha!I have won!")
if(s2==5)
printf("Oh!You are perfect!")
getch()
exit(0)
}
void put_cards(void)
{
int wanna_put,i,j,tag2,guess
int q,p/*标记牌小于牌temp的个数,若p或q等于5,则表示没有*/
int r,s/*分别用来标记玩家和电脑牌还剩多少张*/
puke temp2,temp
if(point<11)
{
guess=finger_guess() /*调用猜拳函数决定谁先出牌*/
if(guess==1)/*如果玩家赢拳,则标记tag=0,表示玩家先出*/
tag2=0
else /*如果电脑赢拳,则标记tag=1,表示电脑先出*/
tag2=1
}
if(tag==3&&tag2==0)
{
while(1)
{
scanf("%d",&wanna_put)
if(a[wanna_put-1].flag==0)
{
printf("Wrong!\nInput again.")
continue
}
else
{
printf(" player: %c%10s\n",a[wanna_put-1].suit,a[wanna_put-1].face)
temp=a[wanna_put-1]
a[wanna_put-1].flag=0
tag2=2/*表示该computer出牌了*/
break
}
}
}
if(tag==3&&tag2==1)
{
for(j=0j<5j++)
if(b[j].flag!=0)
{
temp=b[j]
break
}
for(i=1i<5i++)
if(b[i].flag>0&&temp.flag>b[i].flag)
temp=b[i]
for(j=0j<5j++)
if(temp.flag==b[j].flag)
b[j].flag=0
printf("computer: %c%10s\n",temp.suit,temp.face)
tag2=3/*表示该玩家出牌*/
}
while(tag!=0&&tag!=1)/*即当tag等于3的时候为入口。tag为0时玩家大,为1时电脑大*/
{
if(tag2==2) /*如果是该电脑出牌*/
{
p=0
s=0
for (i=0i<5i++)
{
if((b[i].flag>0)&&(b[i].flag<temp.flag))
{
p++
continue
}
else if(b[i].flag>temp.flag)
{
temp2=temp
temp=b[i]
break
}
}
for(j=0j<5j++)
{
if(b[j].flag!=0)
s++
}
if(p<s)
{
for(j=ij<5j++)
if(b[j].flag>0&&b[j].flag<temp.flag&&b[j].flag>temp2.flag)
temp=b[j]
printf("computer: %c%10s\n",temp.suit,temp.face)
tag2=3 /*表示该玩家出牌*/
for(j=0j<5j++)
if(temp.flag==b[j].flag)
b[j].flag=0
if(point==54)
{
s1=0
for(i=0i<5i++)
if(b[i].flag==0)
s1++/*用来标记电脑是否已经赢牌*/
if(s1==5)
EXIT()/*如果赢牌,则程序结束,跳到末尾*/
}
}
if(p==s) /*表示没有,退出循环*/
{
tag=0
tag2=0
temp.flag=0
printf("The card is so high.I can't put down.\n")
}
}
if(tag2==3)
{
q=0
r=0
for (i=0i<5i++)
{
if((a[i].flag>0)&&(a[i].flag<temp.flag))
q++
}
for(j=0j<5j++)
{
if(a[j].flag!=0)
r++
}
if(q==r)
{
printf("Sorry.The card is so high.You have to give up!\nLet's take new cards.\n")
temp.flag=0
tag=1/*表示电脑这局大*/
tag2=1/*表示下次开牌由电脑先出*/
}
while (q<r)
{
scanf("%d",&wanna_put)
if(wanna_put>6||(wanna_put<6&&a[wanna_put-1].flag<=temp.flag)||a[wanna_put-1].flag==0) /*错误:电脑如果没有,而我又出牌导致temp是前一次的牌。*/
{
printf("Wrong!Input again!")
continue
}
else if(wanna_put==6)
{
tag=1
tag2=1
printf("You give up!\n")
break
}
else
{
temp=a[wanna_put-1]
a[wanna_put-1].flag=0
printf(" player: %c%10s\n",temp.suit,temp.face)
if(point==54)
{
s2=0
for(i=0i<5i++)
if(a[i].flag==0)
s2++
if(s2==5) /*表示玩家已经赢牌*/
EXIT()
}
tag2=2
break
}
}
}
}
}
main()
{
riffle()
while (1)
{
display()
tag=3
put_cards()
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)