吴昊品游戏核心算法 Round 17(补遗篇) —— 单词游戏(后篇)
前篇中,讲述了两个利用经典的游戏改编而成的记单词游戏,而本篇中则讲述两个在实际生活中本来就存在的单词游戏,只不过是由于非常经典,而被搬到了软件游戏中——其中一个是单词接龙,还有一个游戏的名字叫做单词传话,都比较有意思,在现实生活中适合多人玩乐。
在介绍那两个游戏之前,先打趣一下,关于单词的应用无处不在,不仅仅局限在游戏中。比如,在随便一个Office Word应用中,就存在单词统计,单词编辑的各种算法,这里仅仅举出一个例子来说明:
Word的字数统计系统
如图,这是一个“字数统计”的小功能,我们将其加强一下,成为“非重复英文单词统计”。我们要实现这样一个小AI,就是当你用英文写出一篇文章之后,可以很快统计出整篇文章中的非重复的单词数。
实现的策略如下:一个直观的方法当然是利用STL里面的SET容器或者VECTOR容器来实现(实际上,很多容器对单词处理都很有帮助的,比如MAP容器,就是专门处理单词翻译中的映射的),但是,这里用一个二维数组来存储以前出现过的单词,并记录出现过的未重复的单词的总数,并用一个一维数组来读入整篇文章,那么,整个的Input就是这篇文章的全文,而输出则是一个数字,代表不重复的单词总数,AI的代码如下:
2 #include <string.h>
3
4 //word数组用来记录所有的单词
5 char word[100000];
6 //arr二维数组来记录所有已经被存储的单词
7 char arr[100][100];
8
9 int main()
10 {
11 int len, pos, count;
12 char temp[100];
13 //利用gets读入整段文章,每行每行地读,直到#表示文章读完
14 while(gets(word) && strcmp(word, "#") != 0)
15 {
16 //获取长度
17 len = strlen(word);
18 //这里是一个位置标志
19 pos = 0;
20 count = 0;
21 // pos加单词长度一直到>=len
22 while(pos < len)
23 {
24 //利用sscanf函数将一个单词存入temp中
25 sscanf(word + pos, "%s", temp);
26 int i;
27 for(i = 0; i < count; i ++)
28 {
29 //如果单词相同的话,就不存入了,并立刻跳出循环,这里起到一种检测的作用
30 if(strcmp(arr[i], temp) == 0)
31 break;
32 }
33 //存入一个新的单词
34 if(i == count)
35 strcpy(arr[count++], temp);
36 //将计数器转到新的单词的首字母上
37 pos += strlen(temp) + 1;
38 }
39 //判断是否全为空格
40 int k, m = 0;
41 for(k = 0; k < len; k ++)
42 if(word[k] == ' ')
43 m++;
44 if(m == len)
45 printf("0\n");
46 else
47 printf("%d\n", count);
48 }
49 return 0;
50 }
在POJ 2337中,阐述了一款平时很常见的游戏,也就是我们在生活中经常玩到的“单词接龙”,由于在生活中普遍使用(这样的游戏,比如成语接龙,在我们国人的生活中也是很普遍的,原理类似),故被搬到了软件上,供玩家享乐,我这里给出的是单词接龙V1.1版的界面:
我们需要做的是,每次按照一定顺序来点击所需要的方块,然后在点击第二个单词的时候,其单词的首字母必须要和第一个单词的尾字一样,不然这是衔接不上的。为了简化起见,我们同样是只完成其AI的部分,我们的AI可以完成如下的功能:(1)判断对于输入所列出的所有单词,判断出是否存在接龙的情况(2)如果存在的话,输出这一条长龙。
Input:给出的所有单词(我们这里只是对所有单词进行首尾相接,如果要分别考虑不同的单词的话,可以排列组合一下)
Output:如果构成环或者串的话,则输出环或串,如果不构成环或者串的话,则输出***
欧拉回路奥义:
(关于裸的欧拉回路的构造,详见HDOJ 1878,这里主要将欧拉回路用在这款游戏中):
欧拉回路:图G,若存在一条路,经过G中每条边有且仅有一次,称这条路为欧拉路,如果存在一条回路经过G每条边有且仅有一次,称这条回路为欧拉回路。具有欧拉回路的图成为欧拉图。
判断欧拉路是否存在的方法
有向图:图连通,有一个顶点出度大入度1,有一个顶点入度大出度1,其余都是出度=入度。
无向图:图连通,只有两个顶点是奇数度,其余都是偶数度的。
判断欧拉回路是否存在的方法
有向图:图连通,所有的顶点出度=入度。
无向图:图连通,所有顶点都是偶数度。
程序实现一般是如下过程:
1.利用并查集判断图是否连通,即判断p[i] < 0的个数,如果大于1,说明不连通。
2.根据出度入度个数,判断是否满足要求。
2 #include <algorithm>
3 using namespace std;
4
5 const int maxn = 1000 + 10;
6 //假设单词的总长不超过28
7 const int max_l = 28;
8
9 char ret[maxn][max_l];
10
11 struct edge
12 {
13 int to;
14 int next;
15 char str[max_l];
16 };
17
18 //定义一条边
19 edge node[maxn];
20
21 int adj[max_l];
22 int in[max_l];
23 int out[max_l];
24
25 bool used[maxn];
26 bool exist[max_l];
27
28 int p[max_l]; /* 并查集 */
29 int num_e = 0;
30 int ret_e = 0;
31
32 //按照字典序从大到小排序
33 bool cmp(edge p1, edge p2)
34 {
35 return strcmp(p1.str, p2.str) > 0;
36 }
37
38 //初始化各种参数
39 void init()
40 {
41 for(int i = 0; i < max_l; ++i)
42 {
43 in[i] = 0;
44 out[i] = 0;
45 p[i] = -1;
46 exist[i] = 0;
47 adj[i] = -1;
48 }
49 for(int j = 0; j < maxn; ++j)
50 used[j] = 0;
51 num_e = 0;
52 ret_e = 0;
53 }
54
55 int find_set(int u)
56 {
57 //直接找到最源头的祖先结点
58 if(0 <= p[u])
59 {
60 p[u] = find_set(p[u]);
61 return p[u];
62 }
63 return u;
64 }
65
66 void union_set(int u, int v)
67 {
68 int r1 = find_set(u);
69 int r2 = find_set(v);
70 //如果检测到两个点同祖先,则返回
71 if(r1 == r2) return;
72 int n1 = p[r1];
73 int n2 = p[r2];
74 if(n1 < n2)
75 {
76 p[r2] = r1;
77 p[r1] += n2;
78 }
79 else
80 {
81 p[r1] = r2;
82 p[r2] += n1;
83 }
84 }
85
86 void Eular(int vertix, int idx)
87 {
88 for(int i = adj[vertix]; i != -1; i = node[i].next)
89 {
90 if(!used[i])
91 {
92 used[i] = 1;
93 Eular(node[i].to, i);
94 }
95 }
96 /*idx就是node数组的下标,标识一条边*/
97 if(0 <= idx) strcpy(ret[ret_e++], node[idx].str);
98 }
99
100 int main()
101 {
102 int t=i=n=u=v=0;
103 //选择一个顶点开始遍历
104 int start = 0;
105 scanf("%d", &t);
106 //对多个样例,进行逐一分析
107 while(t--)
108 {
109 scanf("%d", &n);
110 if(!n) continue;
111 for(i = 0; i < n; ++i)
112 scanf("%s", node[i].str);
113 init();
114 start = max_l;
115 //按照从大到小的字典序对每个单词进行排序
116 sort(node, node + n, cmp);
117 //开始建图,这里直接写在main函数内
118 for(i = 0; i < n; ++i)
119 {
120 //得到每个单词的首尾两点对应的位置
121 u = node[i].str[0] - 'a';
122 v = node[i].str[strlen(node[i].str) - 1] - 'a';
123 //尾点为入点,首点为出点
124 in[v]++;
125 out[u]++;
126 //这个位置的点是存在的
127 exist[u] = 1;
128 exist[v] = 1;
129 union_set(u, v);
130 node[num_e].to = v;
131 node[num_e].next = adj[u];
132 adj[u] = num_e++;
133 }
134 //判断是否连通
135 int scc = 0;
136 for(i = 0; i < max_l; ++i)
137 {
138 if(exist[i] && 0 > p[i])
139 ++scc;
140 if(1 < scc)
141 break;
142 }
143 //如果不连通的话
144 if(1 < scc)
145 {
146 printf("***\n");
147 continue;
148 }
149 //这里判断是同路还是回路
150 int a = 0;
151 int b = 0;
152 start = -1;
153 for(i = 0; i < max_l; ++i)
154 {
155 //如果这个点是端点而且初度和入度不相等的话,记录情况
156 if(exist[i] && in[i] != out[i])
157 {
158 if(1 == in[i] - out[i]) a++;
159 else if(1 == out[i] - in[i])
160 {
161 b++;
162 start = i;
163 }
164 else break;
165 }
166 }
167 //如果没有遍历到所有单词的话,不能接龙
168 if(i < max_l)
169 {
170 printf("***\n");
171 continue;
172 }
173 //如果不满足净初度和净入度和都为1的话,也不能接龙
174 else
175 {
176 if(!((0 == a + b) || (1 == a && 1 == b)))
177 {
178 printf("***\n");
179 continue;
180 }
181 if(-1 == start)
182 {
183 //回路,找到第一个存在的字母
184 int k = 0;
185 for(k = 0; k < max_l; ++k)
186 {
187 if(out[k]) break;
188 }
189 start = k;
190 }
191 //从顶点start开始dfs,利用dfs来找到路径
192 Eular(start, -1);
193 printf("%s", ret[ret_e - 1]);
194 for(i = ret_e - 2; i >= 0; --i)
195 printf("-->%s", ret[i]);
196 printf("\n");
197 }
198 }
199 return 0;
200 }
传话游戏是一个古老的多人游戏,为从队伍首端通过耳语或肢体语言传达一句话至队尾,通常游戏结束时最初的那句话已变得面目全非。游戏过程中的注意事项是,两人在进行传话时,不能有第三方听见。这个游戏旨在说明谣言或者是传说在扩散中因传播者误听或添油加醋所产生的效果。游戏也可以一定程度提高参与者的口语交际能力。
在基于android的智能手机中,我们利用了数字语音技术制造出了一个不错的游戏,如图所示,最开始的那个人选择一个句子,然后用普通话录音,传给第二个人,第三个人,第N个人,这(N-1)个人利用中国的不同方言分别进行录音,而每个录音者之间是不允许作弊的,也就是说,他们彼此智能用那句录音来交换信息。等传到了最后一个人的时候,他不得不根据他所听到的话在以下提供选择的句源中选择一个句子,然后我们可以看到通过了逐层的传递之后,最后一个人和第一个人之间会存在着多大的出入。
本题的模拟算法来自今年编程之美的资格赛,嗯,我不得不说,去年是AI嘛,今年改成和百度之星的模式了,本人很幸运地打入了复赛(加上时间和大数据283名,第一场),嗯,等T-SHIRT拿到手的时候还是要果断秀一下的。我们这里就实现一个单词传话游戏的模拟(这里的代码用的是自己的)。
Input:首先是一张翻译表,固定地描述了一个单词会被误传到什么样子(当然,在实际中,这会基于一定的概率发生),最后是一句想传的句子
Output:输出最后传成的句子
这里,我用到了STL中的MAP容器作为映射,有了容器的帮助,问题简单了许多!
2 #include<string>
3 #include<iostream>
4 #include<algorithm>
5 #include<map>
6 #include<sstream>
7 using namespace std;
8
9 int main()
10 {
11 int T;
12 int nCase=1;
13 scanf("%d",&T);
14 while(T--)
15 {
16 int n,m;
17 scanf("%d%d",&n,&m);
18 //利用map容器装载这个"传话词典"
19 map<string,string> k;
20 k.clear();
21 for(int i=0;i<m;i++)
22 {
23 char a[25],b[25];
24 cin>>a>>b;
25 k[a]=b;
26 }
27 //这里读入一个回车
28 getchar();
29 string word;
30 getline(cin,word);
31 //这里可以将一句话重新拆分成一个一个单词
32 istringstream stream(word);
33 string w;
34 cout<<"Case #"<<nCase++<<": ";
35 while(stream>>w)
36 {
37 //如果一个单词有翻译的话,最多转换(N-1)次,到末尾为止
38 if(k[w]!="")
39 {
40 for(int i=0;i<n-1;i++)
41 {
42 if(k[w]!="")
43 {
44 w=k[w];
45 }
46 }
47 cout<<w<<" ";
48 }
49 //否则,就当做没有歧义的原话输出
50 else cout<<w<<" ";
51 }
52 cout<<endl;
53 }
54 return 0;
55 }
关于单词游戏——还有很多!
(以下是随便找到的一些,所以说,软件工程师的创作资料还是蛮多的)
1.抢读单词
这是训练学生从认读单词能力的游戏,教师将全班分成若干小组,然后逐个出示一些单词卡片或图片,学生们举手抢答,教师让最先举手的学生读出该单词并说出其中的意思,或将图片上的单词读出来拼出来,读对说对拼对的给该组记10分,得分最多的组为优胜。
2.看图猜词
以每一纵行为一组进行竞赛,教师先出示一些单词的图片,然后收起来, 再从中抽出一张放在身后,由每组的第一名学生轮流猜,可以问:“Is it a plane (bus,bike)?”回答:Yes, it is.或No,it isn‘t.等。哪个组猜对了就给记10分,然后接着往下猜,第一排的学生猜过后第二排接着猜,最后得分最多的组为优胜。做这个游戏时,还可以找一位学生 来主持,由他让学生们猜。
3.看图写单词
这是让学生们复习学过单词的游戏,教师事先把需复习的20个单词用 简笔画画在小黑板上或大白纸上,先不要让学生们看见,然后将全班按前后左右四人一组分成若干小组。竞赛开始,教师将小黑板或白纸挂起来,让学生们看一分 钟,然后收起来,再给学生们两分钟时间将看到的单词写出来,写得最多最正确的组获胜。
4.相同词首单词拼读赛
将全班分成若干小组,教师说一个字母(如:D),第一组的 第一名学生立即站起来,说出并拼出三个(也可以是五个或十个,视学生词汇量的多少而定)以字母D打头的单词,如:desk,dog,door等,念不出或 念错要扣分,这位学生说完后,教师念另一个字母,由第二组的第一名学生说。这样依次进行下去,最后看哪组得人最多为胜,做这个游戏时,也可以让两组的学生 轮流说字母(如由第一组的第一名学生说字母,由第二组的第一名学生答)这样就成了对抗赛,注意不要说Q,X,Z等字母。
5.拼单词对抗赛
将全班分成若干小组,对抗赛在两个小组中进行,在教师宣布游戏开始后,第一组的第一名学生立即用中文说出一个单词(如:自行车),第一组的第二名学生应立即将这个单词说出来,说错或不能迅速说出单词的记负分,最后哪组扣分最少为优胜。
6.相同元音单词拼读对抗赛
将全z班分成若干小组,对抗赛在两个小组中进行,游戏 开始,教师说一个单词(如:bike),第一组的学生A应立即站起来,说出一个含相同元音(即元音[ai]的单词),如:five,说出词义并拼出来,说 不出,说错词义拼错要扣分,这位学生说完后,教师念另一个单词,由第二组的学生A站起来说,这样依次进行下去,最后看哪组得分最多为优胜。做这个游戏时, 也可以让两组学生轮流说单词(如由第一组的学生A说一个单词,由第二组的学生A答),这样就成了对抗赛。
7.拼读单词列队比赛
将全班分成两组,教师发给每个学生一张字母卡片,不常用的字母(如Q,Z)可以一人多拿几张,游戏开始,教师说一个单词,如ship,或出示一张轮船的图片,两个组持S,H,I,P字母的学生应立即站到讲台前按顺序站好队,先按正确次序排好队的为优胜。
8.单词接龙
将全班分成若干组,每组来一个学生在黑板上写出一个以某字母为词首的 单词,前一个单词的词尾字母作下一个单词的词首字母。在规定时间内哪一组接的词最多为优胜。如:pen-nice-eight-tea-an-no- or-right-teacher-radio-on-nor等。
8.猜袋中物
教师从书包中拿出一件东西放入一只不透明的袋子里,由每组的第一名学生轮流猜,可以问:“Is it a banana(an apple,orange)?”猜对了为优胜。
9.换宝
教师准备好一些单词卡片(有的写中文,有的写英词)和图画。将卡片和图 画放入一只不透明的袋子里。游戏开始教师说,袋子里装的是许多宝物,让学生们上来轮流摸宝,如果摸到的是写有英文的卡片,则要英译汉;如果是中文,则要汉 译英并拼读出来;如果是图片,则要看图说英语。
10.看图猜词大家答
教师先出示一些单词的图片,然后收起来,请一名学生到前面 猜,猜的学生面对全班,再请另一名学生上前站在他身后,抽出一张图片高举在手中。猜的学生可以问全班:“Is it a plan(ship,bike)?”等,全班学生答:“Yes.”或“ No.”猜对后可以换另一位学生继续猜。
11.猜颜色
教师先准备一些单词的图片。如白色的飞机,红色的小汽车,黑色的 鞋,绿色的上衣等。游戏开始,请一名学生到前面来猜,猜的学生面对全班站立,再请另一名学生上前站在他身后,抽出一张图片高举在手中并说:“This is a plane(car).What colour is it?Please guess.”猜的学生可以问全班:“Is it red (black)?”等,全班学生答:“Yes.”或“No.”猜对后可以换另一位学生继续猜。
12.缺了什么
这 是训练学生记忆力的游戏。教师出示一些实物,放在讲台上,让上来猜的学生先看半分钟,然后背向讲台面向学生站立,再让另一位学生上来取走一样东西。然后 说:“Pease guess What is missing?”猜的学生要在10秒钟内用英语把缺的东西说出来。
13.传递单词
每一排为一组,全班分成若干组,教师分别发给每一组最后一排的学 生一张纸,上面写个单词。在教师说开始后,最后一排的学生即用耳词把纸上的单词告诉前面的学生,这位学生再把听到的单词告诉前面的学生…这样依次进行下 去。最后,第一排的学生把所传的单词写到黑板上,传得最快,最准的组获胜。
14.找对子
教师将20个单词的图片贴在黑板上,另外将20张对应的单词卡扣着 放在讲台上,然后让参赛的两组学生逐一上来抽卡片,抽出卡片后先要举给学生们看,然后把黑板上相应的图摘下来并将单词读出来,找对读对的得2分,找对读错 给1分,找错了的不得分,卡片全部抽完后,得分多的为优胜。
15.摸鼻子
这是训练学生听单词并快速作出反应的游戏,在学了单词nose,ear,eye,
leg,hand,arm,finger 等单词后,教师可快速说出这些单词,学生听到指令便用手触摸这个部位,最快最准的获胜,当学生做得非常熟悉后,还可以增加难度,可要求学生听到哪个单词不 许摸哪个部位,如教师说“nose”,学生不可以摸鼻子,但可以摸眼睛,耳朵,嘴等其它部位,这个游戏可以用竞赛的形式进行,每组抽一名学生到前面作动 作,做错了就被淘汰,最后剩下的一人或两人为优胜。
16.听单词做动作
这个游戏的玩法与“摸鼻子差不多,在学了run,walk,sit,stand,swim,
skate,play,football,play, basketboll等动词和动词词组后,教师可快速说出这些动词或词组,学生听到便做动作,最快最准的获胜,这个游戏同样可以用竞赛的形式进行,每组抽 一名学生到前面做动作,做错了就被淘汰,最后剩下的一人或两人为优胜。
17.宾狗(Bingo)
这个游戏的玩法与游戏(7)相同,每个学生准备一张 纸,并在上面画一个井字,将纸分成九格,然后教师随便念九个学过的单词,学生边听边将单词写在格子中,随便填在哪格里都好。学生填好后,教师再打扰次序逐 个念这九个单词,学生边听边在听到单词上画圈,当画的圈在横行、竖行或对角线上成为一条直线时,学生就可边喊“宾狗(Bingo)”边将纸举起让教师检 查,最先喊“宾狗”写得准确的获胜。这个游戏还可以用于数词,也就是说,教师可以随意念九个数词来代替九个单词,让学生填入格子中。
18.报电话号码对抗赛
以下几个游戏都是训练学生说数词能力的,这个游戏的玩法 是:将全班分成若干个小组,对抗赛在两个小组中进行,参赛的每个学生都要准备一张纸,上面写一个六位数的电话号码,在教师宣布游戏开始后,第一组的第一名 学生立即出示他手中的号码,第二组的第一名学生应立即用英文将这个号码说出来,然后该学生出示手中的号码,第一组的第二名学生应立即将这个号码说出来,说 错或不能迅速说出的记负分,最后哪组扣发最少为优胜。
19.猜年龄
教师事先准备好一批人物的图片,如Mike,Kate等,在图片的 反面写上数字,如5,8,11,15等。这个游戏可以每一纵行为一组进行竞赛。由教师或一位学生出示一张图片,由每组的第一名学生轮流猜,可以说:“Is he(she)twelve(eleven)?”等。哪个组的学生猜对了就给该组记10分,然后接着往下猜。第一排的学生猜过后第二排接着猜。最后哪个组 得分最多为优胜。
20.加减运算对抗赛
将全班分成若干个小组,对抗赛在两个小组中进行,在教师宣 布游戏开始后,第一组的第一名学生立即出一道加减题,如:Three and four.等,第二组的第一名学生应立即用英文将答案说出来,如:seven,three等,然后,该学生出另一道题,由第一组的第二名学生回答,答错或 不能迅速答出的记负分,最后哪组扣分最少优胜。
21.猜袋中东西数
将全班分成若干小组,每组抽一人到前面,背对着班级。教师拿一个袋子,并向学生们借一些书本,铅笔,钢笔,橡皮等,放入袋中,然后让各组学生轮流猜袋子里东西的数目,猜对的给该组记10分。
22.找邻居
教师让全班学生依次报数,然后用汉语说一个数,如“三十六”则三十 六号学生应立即起来并用英语报数“thirty-six”,然后前面一号(35号)和后面一号(37号)就要相继站起来,用英语说“thirty- five”和“thirty-seven”。这个游戏也可以分组竞赛,教师可将学生按左右分成两组,一组报单数,另一组报双数,在教师说一个数(如“二十 七”)后,某一组中的27号学生应首先站起来用英语说“twenty-seven”另一组中其后面一号(28号)的学生要紧接着站起来,用英语说 “twenty-eight”,不能迅速站起来或是说错了的要扣分,最后扣分最少的组为优胜。
23.拍七
将全班按纵行分成若干组,每组派一至二人到前面围成一圈,教师任意指 定一个学生开始说one,然后依次让第二个two说,第三个说three…说到seven,seventeen…或七的倍数(如 fourteen,twenty-one等)时,就不报数而用拍手代替,该拍手时报了数,或者报错了数字,就被罚下去。游戏重新开始,直到剩下最后两个 人,给这两个组记10分。做这个游戏,还可以与记单词结合起,可以在该拍手时说一个刚学过的比较难记的单词,如language等,说错了要被罚下去,并 换一个单词重新开始游戏,这样不仅可以帮助学生读英语单词,还可以复习单词,这个游戏除了可以分组竞赛外,还可以在全班进行。
24.找出不合群的单词
教师说一组单词(如car,bus,jeep,sheep),比一比谁能最先挑出意义上不合群的词。上述单词中sheep不合群,因为car,bus,jeep,属于交通工具一类的,而sheep属于动物一类的词。
25.增减字母变单词
教师说出或出示一个单词,要求学生增加或减少一个字母使其变成另一个单词,如:it-its,read-red.这个游戏也可以进行抢答。
26.变换字母次序组成新单词
教师说出或出示一个单词,要求学生变换字母次序使其变成另一个单词,如:east-seat,这个游戏也可以进行抢答。下列单词可供参考,are-ear;read-dear;meat-team;stop-spot;now-won等。
27.分拆单词链
教师出示一个单词锭,如theredoorunder,要求学生在一定时间内将单词链拆成最多的单词。如: the,he,her,here,there,red,door,or,run,under.
28.词中有词
教师给出一个单词,根据该单词中的字母,组成新单词,看谁组成 的单词多,例如:late(5):a,at,ate,let,tea下列单词可供参考,括号中的数字是可组成的最低单词 数:team(5),table(10),woman(10)answer(10),strong(10),mountain(20),honest(15),nothing(15),father(20),cart(5).
29.反义词(同义词,对应词)拔河赛
首先要做一“拔河绳”,方法是在投影仪或 磁性黑板上画一横线,中间位置画一竖线作为“界河”,左右划五个小格最外边的两个小格作为“界河线”。将一只棋子放在中心线上作为绳的中心,若没有磁性黑 板,可以在黑板上横挂一绳子,绳子中间挂一红纸环作为绳的中心。然后将学生分成若干队,由其中两队进行拔河,游戏开始,甲队的第一人说出一个词,乙队的第 一个人应立即说出其反义词(同义词或对应词),要是他说对了,棋子(或红纸环)要向甲方移动一格,要是他说不出或说错了,棋子(或红纸环)要向乙方移动一 格,然后乙队的第一个人说一个词,由甲队的第二人说出其反义词(同义词或对应词),当棋子移动了五格,到达乙方界河边时,甲方胜利了。
30.名词复数拔诃赛
这个游戏的玩法和上一个游戏差不多,只是甲队第一个人说一个单词后,乙队的第一个人要说出并拼出这个单词的复数形式,胜负的确定也和上面的游戏一样。
这是训练学生从认读单词能力的游戏,教师将全班分成若干小组,然后逐个出示一些单词卡片或图片,学生们举手抢答,教师让最先举手的学生读出该单词并说出其中的意思,或将图片上的单词读出来拼出来,读对说对拼对的给该组记10分,得分最多的组为优胜。
34看图猜词
以每一纵行为一组进行竞赛,教师先出示一些单词的图片,然后收起来,再从中抽出一张放在身后,由每组的第一名学生轮流猜, 可以问:“Is it a plane (bus,bike)?”回答:Yes it is.或No,It isn‘t.等。哪个组猜对了就给记10分,然后接着往下猜,第一排的学生猜过后第二排接着猜,最后得分最多的组为优胜。做这个游戏时,还可以找一位学生 来主持,由他让学生们猜。
35看图写单词
这是让学生们复习学过单词的游戏,教师事先把需复习的20个单词用简笔画画在小黑板上或大白纸上,先不要让学生们看见, 然后将全班按前后左右四人一组分成若干小组。竞赛开始,教师将小黑板或白纸挂起来,让学生们看一分钟,然后收起来,再给学生们两分钟时间将看到的单词写出 来,写得最多最正确的组获胜。
36相同词首单词拼读赛
将全班分成若干小组,教师说一个字母(如:D),第一组的第一名学生立即站起来,说出并拼出三个(也可以是五个 或十个,视学生词汇量的多少而定)以字母D打头的单词,如:desk,dog,door等,念不出或念错要扣分,这位学生说完后,教师念另一个字母,由第 二组的第一名学生说。这样依次进行下去,最后看哪组得人最多为胜,做这个游戏时,也可以让两组的学生轮流说字母(如由第一组的第一名学生说字母,由第二组 的第一名学生答)这样就成了对抗赛,注意不要说Q,X,Z等字母。
37拼单词对抗赛
将全班分成若干小组,对抗赛在两个小组中进行,在教师宣布游戏开始后,第一组的第一名学生立即用中文说出一个单词(如:自行车),第一组的第二名学生应立即将这个单词说出来,说错或不能迅速说出单词的记负分,最后哪组扣分最少为优胜。
39相同元音单词拼读对抗赛
将全z班分成若干小组,对抗赛在两个小组中进行,游戏开始,教师说一个单词(如:bike),第一组的学生 A应立即站起来,说出一个含相同元音(即元音[ai]的单词),如:five,说出词义并拼出来,说不出,说错词义拼错要扣分,这位学生说完后,教师念另 一个单词,由第二组的学生A站起来说,这样依次进行下去,最后看哪组得分最多为优胜。做这个游戏时,也可以让两组学生轮流说单词(如由第一组的学生A说一 个单词,由第二组的学生A答),这样就成了对抗赛。
40拼读单词列队比赛
将全班分成两组,教师发给每个学生一张字母卡片,不常用的字母(如Q,Z)可以一人多拿几张,游戏开始,教师说一个单词,如ship,或出示一张轮船的图片,两个组持S,H,I,P字母的学生应立即站到讲台前按顺序站好队,先按正确次序排好队的为优胜。
41单词接龙
将全班分成若干组,每组来一个学生在黑板上写出一个以某字母为词首的单词,前一个单词的词尾字母作下一个单词的词首字母。 在规定时间内哪一组接的词最多为优胜。如:pen-nice-eight-tea-an-no-or-right-teacher-radio-on- nor等。
42猜袋中物
教师从书包中拿出一件东西放入一只不透明的袋子里,由每组的第一名学生轮流猜,可以问:“Is it a banana(an apple,orange)?”猜对了为优胜。
43换宝
教师准备好一些单词卡片(有的写中文,有的写英词)和图画。将卡片和图画放入一只不透明的袋子里。游戏开始教师说,袋子里装 的是许多宝物,让学生们上来轮流摸宝,如果摸到的是写有英文的卡片,则要英译汉;如果是中文,则要汉译英并拼读出来;如果是图片,则要看图说英语。
44看图猜词大家答
教师先出示一些单词的图片,然后收起来,请一名学生到前面猜,猜的学生面对全班,再请另一名学生上前站在他身后, 抽出一张图片高举在手中。猜的学生可以问全班:“Is it a plan(ship,bike)?”等,全班学生答:“Yes.”或“ No.”猜对后可以换另一位学生继续猜。
45猜颜色
教师先准备一些单词的图片。如白色的飞机,红色的小汽车,黑色的鞋,绿色的上衣等。游戏开始,请一名学生到前面来猜,猜的 学生面对全班站立,再请另一名学生上前站在他身后,抽出一张图片高举在手中并说:“This is a plane(car).What colour is it?Please guess.”猜的学生可以问全班:“Is it red (black)?”等,全班学生答:“Yes.”或“No.”猜对后可以换另一位学生继续猜。
46缺了什么
这是 训练学生记忆力的游戏。教师出示一些实物,放在讲台上,让上来猜的学生先看半分钟,然后背向讲台面向学生站立,再让另一位学生上来取走一样东西。然后 说:“Pease guess What is missing?”猜的学生要在10秒钟内用英语把缺的东西说出来。
47传递单词
每一排为一组,全班分成若干组,教师分别发给每一组最后一排的学生一张纸,上面写个单词。在教师说开始后,最后一排的学 生即用耳词把纸上的单词告诉前面的学生,这位学生再把听到的单词告诉前面的学生…这样依次进行下去。最后,第一排的学生把所传的单词写到黑板上,传得最 快,最准的组获胜。
48找对子
教师将20个单词的图片贴在黑板上,另外将20张对应的单词卡扣着放在讲台上,然后让参赛的两组学生逐一上来抽卡片,抽出 卡片后先要举给学生们看,然后把黑板上相应的图摘下来并将单词读出来,找对读对的得2分,找对读错给1分,找错了的不得分,卡片全部抽完后,得分多的为优 胜。
49摸鼻子
这是训练学生听单词并快速作出反应的游戏,在学了单词 nose,ear,eye,leg,hand,arm,finger等单词后,教师可快速说出这些单词,学生听到指令便用手触摸这个部位,最快最准的获 胜,当学生做得非常熟悉后,还可以增加难度,可要求学生听到哪个单词不许摸哪个部位,如教师说“nose”,学生不可以摸鼻子,但可以摸眼睛,耳朵,嘴等 其它部位,这个游戏可以用竞赛的形式进行,每组抽一名学生到前面作动作,做错了就被淘汰,最后剩下的一人或两人为优胜。
50听单词做动作
这个游戏的玩法与“摸鼻子差不多,在学了 run,walk,sit,stand,swim,skate,play,football,play, basketboll等动词和动词词组后,教师可快速说出这些动词或词组,学生听到便做动作,最快最准的获胜,这个游戏同样可以用竞赛的形式进行,每组抽 一名学生到前面做动作,做错了就被淘汰,最后剩下的一人或两人为优胜。
51宾狗(Bingo)
这个游戏的玩法与游戏(7)相同,每个学生准备一张纸,并在上面画一个井字,将纸分成九格,然后教师随便念九 个学过的单词,学生边听边将单词写在格子中,随便填在哪格里都好。学生填好后,教师再打扰次序逐个念这九个单词,学生边听边在听到单词上画圈,当画的圈在 横行、竖行或对角线上成为一条直线时,学生就可边喊“宾狗(Bingo)”边将纸举起让教师检查,最先喊“宾狗”写得准确的获胜。这个游戏还可以用于数 词,也就是说,教师可以随意念九个数词来代替九个单词,让学生填入格子中。
52报电话号码对抗赛
以下几个游戏都是训练学生说数词能力的,这个游戏的玩法是:将全班分成若干个小组,对抗赛在两个小组中进行,参 赛的每个学生都要准备一张纸,上面写一个六位数的电话号码,在教师宣布游戏开始后,第一组的第一名学生立即出示他手中的号码,第二组的第一名学生应立即用 英文将这个号码说出来,然后该学生出示手中的号码,第一组的第二名学生应立即将这个号码说出来,说错或不能迅速说出的记负分,最后哪组扣发最少为优胜。
53 53猜年龄
教师事先准备好一批人物的图片,如Mike,Kate等,在图片的反面写上数字,如5,8,11,15等。这个游戏 可以每一纵行为一组进行竞赛。由教师或一位学生出示一张图片,由每组的第一名学生轮流猜,可以说:“Is he(she)twelve(eleven)?”等。哪个组的学生猜对了就给该组记10分,然后接着往下猜。第一排的学生猜过后第二排接着猜。最后哪个组 得分最多为优胜。
54加减运算对抗赛
将全班分成若干个小组,对抗赛在两个小组中进行,在教师宣布游戏开始后,第一组的第一名学生立即出一道加减题, 如:Three and four.等,第二组的第一名学生应立即用英文将答案说出来,如:seven,three等,然后,该学生出另一道题,由第一组的第二名学生回答,答错或 不能迅速答出的记负分,最后哪组扣分最少优胜。
55猜袋中东西数
将全班分成若干小组,每组抽一人到前面,背对着班级。教师拿一个袋子,并向学生们借一些书本,铅笔,钢笔,橡皮等,放入袋中,然后让各组学生轮流猜袋子里东西的数目,猜对的给该组记10分。
56找邻居
教师让全班学生依次报数,然后用汉语说一个数,如“三十六”则三十六号学生应立即起来并用英语报数“thirty- six”,然后前面一号(35号)和后面一号(37号)就要相继站起来,用英语说“thirty-five”和“thirty-seven”。这个游戏也 可以分组竞赛,教师可将学生按左右分成两组,一组报单数,另一组报双数,在教师说一个数(如“二十七”)后,某一组中的27号学生应首先站起来用英语说 “twenty-seven”另一组中其后面一号(28号)的学生要紧接着站起来,用英语说“twenty-eight”,不能迅速站起来或是说错了的要 扣分,最后扣分最少的组为优胜。
57拍七
将全班按纵行分成若干组,每组派一至二人到前面围成一圈,教师任意指定一个学生开始说one,然后依次让第二个two说,第 三个说three…说到seven,seventeen…或七的倍数(如fourteen,twenty-one等)时,就不报数而用拍手代替,该拍手时 报了数,或者报错了数字,就被罚下去。游戏重新开始,直到剩下最后两个人,给这两个组记10分。做这个游戏,还可以与记单词结合起,可以在该拍手时说一个 刚学过的比较难记的单词,如language等,说错了要被罚下去,并换一个单词重新开始游戏,这样不仅可以帮助学生读英语单词,还可以复习单词,这个游 戏除了可以分组竞赛外,还可以在全班进行。
58找出不合群的单词
教师说一组单词(如car,bus,jeep,sheep),比一比谁能最先挑出意义上不合群的词。上述单词中sheep不合群,因为car,bus,jeep,属于交通工具一类的,而sheep属于动物一类的词。59增减字母变单词<br>
教师说出或出示一个单词,要求学生增加或减少一个字母使其变成另一个单词,如:it-its,read-red.这个游戏也可以进行抢答。
60变换字母次序组成新单词
教师说出或出示一个单词,要求学生变换字母次序使其变成另一个单词,如:east-seat,这个游戏也可以进行抢答。下列单词可供参考,are-ear;read-dear;meat-team;stop-spot;now-won等。
61分拆单词链
教师出示一个单词锭,如theredoorunder,要求学生在一定时间内将单词链拆成最多的单词。如: the,he,her,here,there,red,door,or,run,under.
62词中有词
教师给出一个单词,根据该单词中的字母,组成新单词,看谁组成的单词多,例 如:late(5):a,at,ate,let,tea下列单词可供参考,括号中的数字是可组成的最低单词 数:team(5),table(10),woman(10)answer(10),strong(10),mountain(20),honest(15),nothing(15),father(20),cart(5).
63反义词(同义词,对应词)拔河赛
首先要做一“拔河绳”,方法是在投影仪或磁性黑板上画一横线,中间位置画一竖线作为“界河”,左 右划五个小格最外边的两个小格作为“界河线”。将一只棋子放在中心线上作为绳的中心,若没有磁性黑板,可以在黑板上横挂一绳子,绳子中间挂一红纸环作为绳 的中心。然后将学生分成若干队,由其中两队进行拔河,游戏开始,甲队的第一人说出一个词,乙队的第一个人应立即说出其反义词(同义词或对应词),要是他说 对了,棋子(或红纸环)要向甲方移动一格,要是他说不出或说错了,棋子(或红纸环)要向乙方移动一格,然后乙队的第一个人说一个词,由甲队的第二人说出其 反义词(同义词或对应词),当棋子移动了五格,到达乙方界河边时,甲方胜利了。
64s名词复数拔诃赛
这个游戏的玩法和上一个游戏差不多,只是甲队第一个人说一个单词后,乙队的第一个人要说出并拼出这个单词的复数形式,胜负的确定也和上面的游戏一样。