游戏中怎么保存一局装备靠打的网络游戏人数和图

她社区用户
不恐怖之见鬼诡事午夜恐怖故事。最为在西平生活了几十年的我也碰到过不少的灵异事情,其实大家一声都遇到鬼一些诡异的事,但是并没有人往那方面想,可是我走夜路却碰到了鬼,没错就是鬼!记得那天傍晚的时候躺在家中怎么也睡不着于是我便打算出去上网,也就在这时放在床上的手机响了起来。拿起手机看了一眼才发现原来是游戏上面的好友给我打的***,想了一会的我最终还是接通了***。“干嘛呢!”刘草的声音从***的那边想起。“在家睡不着,我打算去网吧看看电影!”我如实的说道,此时时间还早,我去网吧打算看看最近追得电影。“看什么电影啊,快点五缺一等着你呢,挂了啊,快点上线!”刘草说完后便催促着我赶快出门,随后便挂断了***。看着手机上面的名字我苦笑的摇了摇头,原本打算去网吧看看电影放松一下,这样一来估计又要玩到深夜了。由于第二天不上班所以我只是在家里又呆了一会才装着钱走出了家门。由于最近的网吧也在金水湾,废了近十来分钟的功夫我才来到了金水湾路口的明基电竞。进门刷卡便直奔二楼自己经常坐的地方便开机上网,一局接一局的游戏直到深夜的时候我才站起来活动了疲惫的身体,又玩了一会看时间实在不早了以后便告别游戏上的刘草自己要回家睡觉去了。刘草在游戏上面不停的骂我,说什么他自己都打算通宵了我却半路走了,不停地道歉后我才下了游戏关闭了电脑。从网吧走出来后感觉非常的冷,可能是在网吧里呆的久的原因吧,活动了下四肢的我便朝着桥头走去,此时已经是凌晨一点多了,路上除了时不时经过的汽车根本看不到任何的行人。我独自一个人走在路灯下面的道路上朝着村子的路口走去,不知不觉竟然看到在路口竟然还有摆夜摊的人。感觉到也有些饿便走过去买了个肉夹馍,一边吃着一边朝着村子里走去。经过村子的主道路我便来到了村后的泥路上面。前面不远处的小树林旁边就是一处坟地,白天的时候从这里经过并没有什么感觉,但是此时四周黑漆漆的,看着不远处的坟地我突然心慌起来,毕竟人都是胆小的,加上路边并没有路灯所以小树林下的坟地显得非常的诡异。不知道是不是神经质一般我突然看到在不远处的坟头旁边仿佛有一个人站在哪里朝我招手,但是当我仔细去看的时候却什么也没有。此时的我觉得越来越诡异不仅加快了脚步,当我经过坟地的时候偷偷的瞥了一眼,可是就在这时我却突然发现树林下的确站着一个人,只不过此时他低着头面朝着我,诡异的是脸上确实黑漆漆的,根本看不到他的摸样。感觉到不对劲的我加快速度的跑了起来,可是下一刻我却觉得自己的头猛地一沉,双眼发黑的我却差一点倒在地上。这是我从小就有的毛病,每当我激动或者受到惊吓的时候都会变得这样,此时的我双手撑在地上努力的呼吸着空气,直到自己感觉舒服了一些才转了一下头看下身后。这一看之下可不得了,当我转过头的时候我看到的是一双腿,顺着双腿慢慢的看上去却发现是一个人站在我的身后,可是当我看清楚站在自己身后男人的模样后惨叫了一声便踉跄的从地上站了起来朝着前面跑去。我之所以这幅摸样是因为我看到了恐怖的一幕,站在我身后的那个男人脸上挂着的笑容太过诡异,男人的嘴角都快裂到耳根处了,诡异的是男人的口中仿佛有个人脸一般的东西贴在舌头上面,当男人笑的时候舌头上的人面就露了出来。当时的我就是看到了这一幕才会奋不顾身的跑,但是没想到的是当我跑出去没多远却发现那个男人还是跟在我的身后,只不过他不是用跑的而是用飘得。此时的我什么都顾不得,在泥路上面深一脚浅一脚没命的跑着,直到我跑到前面不远出的荷塘旁边处却被地上的树根绊倒了。倒在地上的我马上就想起身继续跑,可是接下来便感觉到自己的背部一阵冰凉。趴在地上的我一动都不敢动,我不敢再看到我身后的那个男人,我怕看到他那诡异的笑容和舌头上面的人脸。就在我胡思乱想的时候背后的男人突然伸出了蛇头朝着我的脖颈舔来,没多久我便感觉到我的脖子上面变得麻木了起来,紧接着觉得头昏昏沉沉的。平常的时候只需摇摇头就可以拜托双眼发黑的状况,可是此时脖子麻木的我根本不能有任何的动作,感觉到呼吸越来越困难的我马上就要昏死过去了,可是就在我昏过去的前一秒我突然看到在不远处跑过来一个女人骂着什么,可是每当我听清楚我却昏了过去。再次醒过来的时候已经是中午了,此时父母焦急的在旁边等着我,直到我睁开眼睛后才忙问我感觉怎么样。此时的我感觉身体还行,但是脖子后面不知道为什么那么疼便问母亲我怎么了。母亲告诉我昨天晚上我碰到鬼了,如果不是昨晚回娘家的李姑碰到我估计我就没命了。这时我才想到昨天昏迷之前看到的那个女人才知道原来救了我的是李姑。回想起昨天晚上的事情我便觉得自己的头非常的痛,脖颈处更是钻心的痛。后来母亲告诉我原来我的脖子上面不知道被什么咬了个伤口,当时我回来的时候脸色发白,看到出气多进气少的我母亲便让村子里的村医帮我包扎了一下。回想到昨天晚上的事情我就忍不住的后怕,如果不是李姑我可能就死在那里了吧,自从发生了这件事情以后我再也不敢太晚的回来了,平常走到那个坟地的更是远远的绕开,因为我生怕再一次的碰到那个男人。
照片可能涉及隐私,需***她社区查看
天呐 真的么 怎么看的我把脖子围的紧紧的
她社区用户
打开她社区 App 查看全部回复
{盘点}~毛晓彤唐艺昕徐璐都红了 《甄?传》唯独她红不了? 最近,随着《微微笑一很倾城》、《青云志》的热播,《甄?传》里曾经的小配角们都开始大放异彩,唐艺昕、毛晓彤、徐璐逐渐走红,唯独她----甄?的妹妹到现在都没红。 祺嫔唐艺昕在《青云志》中扮演小师妹田灵儿,被赞青云山第一美人,完胜杨紫。 《微微一笑很倾城》毛晓彤扮演二喜,差点让我们忘了她是瑛贵人。 就连甄?的妹妹玉娆都因为综艺节目火了,新戏《墨客行》也即将上线。 曾经戏份最多的浣碧扮演者----蓝盈莹却在《甄?传》之后没有让再一次被观众记住的角色,实在是有点可惜。 蓝盈莹,毕业于中央戏剧学院08级表演系本科班。2011年出演陈嘉上导演的电影《画壁》进入娱乐圈,第一次大荧幕就和孙俪等老戏骨合作。 2012年在清宫剧《甄?传》中饰演单纯善良为爱牺牲的浣碧而受到关注。 在《甄?传》以后,蓝盈莹担任战争剧《猎杀》女一号,原以为蓝盈莹会像华妃娘娘一样大红大紫,却始终是昙花一现。 2015年,还与佟大为、赵薇一起主演电视剧《虎妈猫爸》,是赵薇的死对头,演技也不错,可是并没有激起什么浪花。 眼看着小花们都开始挑战玄幻剧、仙侠剧,蓝盈莹也加入到《山海经之赤影传说》,饰演青龙玄女芙儿,本性单纯善良的她,在感情遭到背叛后被人利用变身腹黑女,阴差阳错地与好姐妹反目成仇。 可是眼看着90后的小花们一个个都火了,蓝盈莹有着高的起点,和神似梁小冰的长相,可是红不了。蓝盈莹表示,只要扎扎实实的做好自己的作品,是金子总会发光的。
某女神医救下被心上人推入悬崖的某公子,却不料某公子失忆后对她一见钟情,并且开始无耻没下限卖萌倒贴吃豆腐的故事…… 某公子属下:“沈谷主,你……能不能先哄哄他……” 沈知离:“没兴趣。” 某公子属下:“诊费什么绝对不在话下!我们这多的就是银子!” 沈知离:“我看起来像能被银子收买的女人么?” 某公子属下:“拉拉小手一万两!” 沈知离:“……成交!”
姑娘!姑娘!”大街之上,一名青衣男子冒冒失失跑了过来。 她回眸,精致的眉眼尽是妖娆。 他呆在原地,忘记说什么。 她笑,走向他。 “姑姑姑姑……姑娘”他紧张地结结巴巴。“一个姑就好。”她轻笑,“公子有何事?” 他这才想起来,将手中的玉簪递了出去。“姑娘刚刚掉了。”她接过,莞尔,“谢谢。”转身,走了。 他仍怔怔看着她的背影。 “女儿,今天为父的生死之交要来。”她点头:“那明天我就在我的圆子里不出去了,父亲若唤我,我再出去。” 第二天,她在自己园中的秋千上随意晃着,突然感觉身后有人推她,猛的回头,衣袂飘飘间,她好像看见了那天的青衣男子。 “姑娘。”他稳稳扶住秋千。 “你怎么会在这里啊?”她挑眉。“姑娘又为何在这儿?”“我是这家人的丫头。”她撒了谎。“正好,我是偷溜进来的。” “姑娘,……”他俊颜泛红,“你……你愿意让我……帮你推一辈子秋千吗?”晶亮的眸子满是期待。 她眸子一震,“你,可是认真?” “如若负伊,吾不得好死。” 她连忙抚住他的唇。“不要这样说。” 他一愣,抱住她,笑得像个孩子。 不一会儿,他走了,走之前将一个玉镯戴在她手上,说是定情信物。 “父亲,你叫我?”她端庄走进大厅。“这是你的女儿?不错啊!”一个黑袍的中年男子说。“想必这就是父亲的生死之交,周叔叔吧!见过周叔叔。”“好好好。来,宇儿,你们认识认识。”待那青衣少年走出,她才真真是震惊了。见二人不说话,又看见她手上的玉镯,黑袍男子与她父亲相视一笑。 大婚之夜。 她总觉得有些不安,临近夜晚,一道闪电劈过,大雨滂沱,她更是坐立不安,正当焦急时,她听见刀剑的声音,一把扔下盖头,提起衣角跑了出去,刚推门,便看见他被人一刀穿心。 “不!!!”悲怆的大喊,是那样的无助。她踉跄跑了过去抱住倒地的他,红色的嫁衣被雨淋湿,泪水从姣好的面颊留下,“不,你不能死啊……你说过,你会帮我推一辈子秋千的……你不能说话不算话啊……”她无助的像一个孩子。“娘子,别哭,为夫……为夫……还是……负了你……”他眼神温柔,抬起双手想抚住她的脸,却还未触到,就沉重落下。落下时他的眼睛仍贪恋的看着她。“不要!不要!你看看我啊!宇哥哥!你不要丢下娆儿一个人!”可惜却再无回音。 第二天,她坐在秋千上,面容苍白,突然想到他的话,泪水不住的流淌。“宇哥哥,你骗我,你骗我。”她的衣摆被风吹起,衣袂飘飘间,她仿佛又看见那青衣的少年,轻唤她:“姑娘。”
姐姐折磨二胎弟弟,妈妈竟然这样,原来…… 《二胎妈妈都进来看看》 这一年,她6岁,他0岁 弟弟出生了,一个没打招呼的亲戚前来祝贺,当他从手提包里取出一份礼物时,眼尖的妈妈大声说:“你是给我家妞带礼物吗?确实是值得庆祝,因为我家妞得到了一个弟弟,从今天起她是一个姐姐了,多么值得自豪的事情。”亲戚尴尬地将礼物递给了6岁的姐姐,然后说:“弟弟的礼物忘记带了,落在家里,下次一定带过来……” 其实所有给妈妈打过招呼的亲戚和朋友, 无一例外地都带上了两份礼物。 这一年,她8岁,他2岁 一天两人在争抢一个进口的红通通苹果,谁也不肯让谁。妈妈说:“弟弟,你要将苹果让给姐姐,姐姐像你这么大的时候,总是会把最好的东西让给别人。”弟弟委屈,但还是将手里的苹果拿出来了,姐姐脸红了。 其实妈妈的第一反应是要让姐姐将苹果给弟弟,只是开口的那刻突然改变了主意。 这一年,她9岁,他3岁 她跟妈妈说要带弟弟去外婆家,出门的时候,她牵着弟弟的手让妈妈放心。可是刚转角,她就甩掉了弟弟的手。弟弟小跑着跟上,当公车启动那刻,弟弟总算连滚带爬上了车,上车后抓住了姐姐的衣角。可是她趁弟弟看窗外,提前一站下了车,当她在小路上跑得飞快,看见弟弟跌倒在地哈哈大笑,她加紧脚步一直走到外婆家时,一回头弟弟不见了。她意识到出事了狂奔着回头找,但是找遍了整条马路都没人。当她泪流满面地回到外婆家,发现弟弟已经在门槛上等她。 其实从两人出门时,妈妈已经骑着自行车在后面狂奔。 这一年,她11岁,他5岁 虽然每次给姐弟俩买文具,妈妈都是买相同的。但是她总觉得妈妈偏心,将好的给了弟弟。所以她总是趁弟弟睡着的时候,把弟弟的文具都偷光,每当看到弟弟无辜地跟妈妈说自己的文具被小老鼠偷走了,她就会感到从没有过的满足。奇怪的是,妈妈从没怀疑过弟弟的话。 其实妈妈早跟弟弟说,因为自己的出生,姐姐心里委屈。所以每当看到姐姐要偷笔,弟弟就装睡。 这一年,她12岁,他6岁 两人都在同一间小学上学,她上六年纪,他上一年级。他每次放学都会等她一起回家。有一天,她故意从后门溜了,欢天喜地地往家赶,可是赶到一个十字路口,一辆自行车撞到了她身上。车上摔下的老人一把抓住让她让她赔钱,说她把他的车撞歪了。围观的人越来越多,她不知所措时,弟弟冲到了姐姐面前,用小手护住姐姐:“谁也不准欺负我姐姐……”她的眼泪掉下来了,发誓以后再也不欺负弟弟。 其实妈妈总跟弟弟说,你是男子汉,家里的女人都需要他保护,包括姐姐。 慢慢地,妈妈欣喜地看到了家里的变化:姐姐吃东西总会先让给弟弟,去外婆家两人总是牵着手,弟弟的书包里总会出现姐姐的文具,姐姐上初中晚自习,弟弟经常在雨天给姐姐送伞,然后两人打闹着回家…… 每一个和睦的家庭,总有一个宽容智慧的妈妈。你同意吗?愿每一个家庭都能美满幸福!
妻子是怎么了?
有些事不说出来会难过一辈子、说出来又觉得没脸活下去、 我和他是一个偶然的机会在网上认识的、这一年中没有视频也没有发过照片、只是偶尔聊聊天、他也没像别人一样说脏话和发垃圾图或者垃圾信息。总之给我的感觉是幽默风趣成熟稳重、我很喜欢他。但是碍于女孩子就一直不好意思说出口、直到过了一年他对我说喜欢我,我也接受了他。 事情就发生在接受了他的半年后、一直以来都对我呵护百出!我也就不再设防、第一次和他见了面、第一天看见我他就说没想到我这么漂亮什么的、总之把我夸的找不到北了、第一天晚上他意图和我住一块、我没有同意,他也没有强求、第二天他又问我可不可以一起睡,我仍旧没同意。他再一次尊重了我的选择、我对他的对人尊重感动了,决定在第三天答应他的要求……谁料到、第三天他约我吃完饭后就让我早点睡觉、我也没在意什么满口答应着就去洗澡睡觉了、我躺在床上浑身发烫、慢慢的感觉欲火焚身、那感觉就好像万蚁穿心一样火热火燎的情不自禁的双手在自己身上来回游走着…突然他在门外喊了我一声让我开门说买了一些水果给我、我忍着难受给他开了门、不看见他还好、一看见他那感觉就更加强烈、我想要、但我还是强忍住没说、突然他一下子抱住了我,就开始在我耳边喃喃说道,:亲爱的我们认识这么久了今晚我想让你做我的女人。”我努力挣扎着把他推开、他反手拉着我我一个回身他就强行吻上我的嘴唇、身体的感觉愈加强烈自己告诉自己我那么喜欢他他不会背叛我的。噩梦就此开始了……一阵缠绵之后他安抚我睡觉!我也满心欢喜的入睡了、短暂的一梦全是和他的美好、正当我沉迷梦境的时候一双手在我身上来回游荡我知道是他、我没有睁开眼睛准备再次享受这美好的快感、忽然觉得又一双手在摸我的胸部、我猛然睁开眼睛一二三四四个人赤裸裸的在我床上对我邪恶的笑着也包括他、我知道我这次完蛋了我想喊救命但是没人来…我憎恨的看着他任人羞辱着、他们一个个像饿了好久的豺狼……各种羞辱各种糟蹋、第一次我绝望了。面对他们几人的羞辱当时死的心都有了、但是我不要这么软弱下去、我要坚强的活着、我要报仇的呐喊从心底深深的唤着我一次次的没有倒下去、我会记得你们的脸庞你们邪恶的笑你们让我吃你们的私处你们的精液…… 这一切的一切我都要你们千倍万倍的偿还。 我提醒各位网友朋友、网上能不谈恋爱就不谈恋爱、能不见面就不见面、与陌生人吃饭小心下药、千万别一个人约网友……
/看看我的虚拟自拍个位小主勿喷我幼
你们觉得我适合当班花吗?已收藏本页面
前几天玩逆战刷禁魔岛僵尸图,一局下来需要打1个多小时。在游戏最后BOSS打死的时候我说:BOSS打死了,按ESC键,然后狂按回车,能卡永久纪元(这***在商城卖400多RMB)。结果还真有人相信了,照着这么做,结果是退出游戏,打了1个多小时白打的了,当时笑死我了,现在想想还觉得好笑。
心理扭曲,
回复 3楼:在首页匹配的,都不认识
没让人家打死啊?
同体楼上观点
估计你先人都被人家问候过了,我要是有你这样的队友,我他妈顺着网线过去揍你一顿
你能活着发糗百,真不容易
后才能发表评论
你可能喜欢的图片笑话
最受欢迎的爆笑笑话Android实训案例(八)——单机五子棋游戏,自定义棋盘,线条,棋子,游戏逻辑,游戏状态存储,再来一局
阿法狗让围棋突然就被热议了,鸿洋大神也顺势出了篇五子棋单机游戏的视频,我看到了就像膜拜膜拜,就学习了一下,写篇博客梳理一下自己的思路,加深一下印象
视频链接:
我们一看就知道,我们必须自定义View,这里我们定义一个GameView来做游戏主类,第一步,先测量,我们这里不难知道,五子棋他的棋盘是一个正方形,所以我们需要去测量
* @param widthMeasureSpec
* @param heightMeasureSpec
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//获取高宽值
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int hightSize = MeasureSpec.getSize(heightMeasureSpec);
int hightMode = MeasureSpec.getMode(heightMeasureSpec);
//拿到宽和高的最小值,也就是宽
int width = Math.min(widthSize, heightMeasureSpec);
//根据测量模式细节处理
if (widthMode == MeasureSpec.UNSPECIFIED) {
width = hightS
} else if (hightMode == MeasureSpec.UNSPECIFIED) {
width = widthS
//设置这样就是一个正方形了
setMeasuredDimension(width, width);
这里的逻辑还是十分简单的,我们拿到长和宽去比较一下,设置这个View的长宽Wie最小值,就是一个正方形了,所以我们的layout_main.xml是这样写的
&linearlayout xmlns:android=&/apk/res/android& xmlns:tools=&/tools& android:layout_width=&match_parent& android:layout_height=&match_parent& android:orientation=&vertical& android:background=&@drawable/main_bg&&
&com.lgl.fiverow.gameview android:layout_width=&match_parent& android:layout_height=&match_parent&&
&/com.lgl.fiverow.gameview&&/linearlayout&
这里我在构造方法中设置了一个半透明的红色背景,是在我们调试的时候可以更加清晰的看清楚GameView的大小,所以,运行的结果
这个应该也算是棋盘的一部分吧,就是棋盘上的线条,我们应该怎么去画,首先,我们要去定义一些属性
//线条数量
private static final int MAX_LINE = 10;
//线条的宽度
private int mPanelW
//线条的高度
private float mLineH
然后,我们要去确定大小
* 测量大小
* @param w
* @param h
* @param oldw
* @param oldh
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
mPanelWidth =
mLineHeight = mPanelWidth * 1.0f / MAX_LINE;
不要着急,这些都只是一些准备的工作,我们画线条是必须要在onDraw(0方法里的,但是前期我们要准备一只画笔,对吧,所以我们要初始化画笔
* 初始化画笔
private void initPaint() {
//设置颜色
mPaint.setColor(0x);
mPaint.setAntiAlias(true);
//设置防抖动
mPaint.setDither(true);
//设置Style
mPaint.setStyle(Paint.Style.STROKE);
现在我们可以去绘制了,我们在OnDraw(0方法里写一个drawLine方法来专门绘制线条
* 绘制棋盘的方法
* @param canvas
private void drawLine(Canvas canvas) {
//获取高宽
int w = mPanelW
float lineHeight = mLineH
//遍历,绘制线条
for (int i = 0; i & MAX_LINE; i++) {
int startX = (int) (lineHeight / 2);
int endX = (int) (w - lineHeight / 2);
int y = (int) ((0.5 + i) * lineHeight);
canvas.drawLine(startX, y, endX, y, mPaint);
canvas.drawLine(y, startX, y, endX, mPaint);
我们运行一下
好的,这里,注意一下,我在activity_main.xml中定义了一个
android:gravity=¢er&
属性,所以让他居中,同样的,我们在initPaint中加上点代码让我们看的更加直观一点
//设置颜色
mPaint.setColor(Color.BLACK);
//设置线条宽度
mPaint.setStrokeWidth(3);
同样的,我们把构造法里的设置背景的测试代码注释掉
//测试代码
//setBackgroundColor(0x44ff0000);
这样,我们运行一下
得,我们现在有模有样了
棋子我们事先准备好了两张图片,但是这里我们要考虑他的大小的问题了,我们的思路是让他是行高的四分之三大小,所以先声明
private Bitmap mB
private Bitmap mW
//比例,棋子的大小是高的四分之三
private float rowSize = 3 * 1.0f / 4;
然后我们定义一个方法区初始化Bitmap
* 初始化棋子
private void initBitmap() {
//拿到图片资源
mBlack = BitmapFactory.decodeResource(getResources(), R.drawable.stone_black);
mWhite = BitmapFactory.decodeResource(getResources(), R.drawable.stone_white);
拿到资源之后我们就可以设置大小了,我们在onSizeChanged()里面设置
//棋子宽度
int mWhiteWidth = (int) (mLineHeight * rowSize);
//修改棋子大小
mWhite = Bitmap.createScaledBitmap(mWhite, mWhiteWidth, mWhiteWidth, false);
mBlack = Bitmap.createScaledBitmap(mBlack, mWhiteWidth, mWhiteWidth, false);
不过棋子可没我们想象的那么简单,我们要点击一下再去绘制一个棋子,这样的思路该怎么去实现呢?我们实现它的点击事件,这里先定义几个变量
//存储用户点击的坐标
private List mWhiteArray = new ArrayList&&();
private List mBlackArray = new ArrayList&&();
//标记,是执黑子还是白子 ,白棋先手
private boolean mIsWhite =
这样才和触摸事件相得映彰
* 触摸事件
* @param event
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
//按下事件
case MotionEvent.ACTION_UP:
int x = (int) event.getX();
int y = (int) event.getY();
//封装成一个Point
Point p = getValidPoint(x, y);
//判断当前这个点是否有棋子了
if(mWhiteArray.contains(p) || mBlackArray.contains(p)){
//点击不生效
//判断如果是白子就存白棋集合,反之则黑棋集合
if (mIsWhite) {
mWhiteArray.add(p);
mBlackArray.add(p);
invalidate();
mIsWhite = !mIsW
这样,有几点是要说明一下的,首先我们new Point的时候为了避免重复绘制我们是实现了一个方法
* 不能重复点击
* @param x
* @param y
private Point getValidPoint(int x, int y) {
return new Point((int) (x / mLineHeight), (int) (y / mLineHeight));
紧接着我们就判断,要是重复点击,返回false,而且我们在action选择也是选择了ACTION_UP,为什么?为什么不是ACTION_DOWN?因为这个毕竟是一个View,父View会拦截(某些场景),所以我们选在UP上才是合情合理的
好的,当我们点击之后就要绘制棋子了,这里我们也写一个方法
* 绘制棋子的方法
* @param canvas
private void drawPieces(Canvas canvas) {
for (int i = 0; i & mWhiteArray.size(); i++) {
//获取白棋子的坐标
Point whitePoint = mWhiteArray.get(i);
canvas.drawBitmap(mBlack, (whitePoint.x + (1 - rowSize) / 2) * mLineHeight, (whitePoint.y + (1 - rowSize) / 2) * mLineHeight, null);
for (int i = 0; i & mBlackArray.size(); i++) {
//获取黑棋子的坐标
Point blackPoint = mBlackArray.get(i);
canvas.drawBitmap(mWhite, (blackPoint.x + (1 - rowSize) / 2) * mLineHeight, (blackPoint.y + (1 - rowSize) / 2) * mLineHeight, null);
OK,我们实际运行一下
四.游戏逻辑
现在什么都有了,基本上都可用玩了,但是还少了重要的一点就是游戏结束,你到了五颗也需要判断是否胜利呀,对吧,我们写一个方法,在每次绘制完成之后就去判断是否有赢家
* 判断是否胜利
private void checkWin() {
//判断白棋是否有五个相同的棋子相连
boolean mWhiteWin = checkFiveLine(mWhiteArray);
//判断黑棋是否有五个相同的棋子相连
boolean mBlackWin = checkFiveLine(mBlackArray);
//只要有一个胜利,游戏就结束
if (mWhiteWin || mBlackWin) {
mIsGameOver =
mIsWhiteWin = mWhiteW
Toast.makeText(getContext(), mIsWhiteWin ? &白棋胜利& : &黑棋胜利&, Toast.LENGTH_SHORT).show();
好的,我们重点逻辑就在checkFiveLine这个方法上了,这里,我们所知道的胜利有四种情况
我们先定义一个常量
//胜利棋子数量
private static final int MAX_COUNT_IN_LINE = 5;
OK,接下来我们可以实现以下胜利的逻辑了
* //判断棋子是否有五个相同的棋子相连
* @param points
private boolean checkFiveLine(List points) {
//遍历棋子
for (Point p : points) {
//拿到棋盘上的位置
int x = p.x;
int y = p.y;
* 四种情况胜利,横,竖,左斜,右斜
boolean win = checkHorizontal(x, y, points);
win = checkVertical(x, y, points);
win = checkLeft(x, y, points);
win = checkRight(x, y, points);
我们不管哪个方向只要返回true就返回true,然后弹Toast,这里,四个方向的逻辑
* 判断横向的棋子
* @param x
* @param y
* @param points
private boolean checkHorizontal(int x, int y, List points) {
//棋子标记,记录是否有五个
=1是因为自身是一个
int count = 1;
for (int i = 1; i & MAX_COUNT_IN_LINE; i++) {
if (points.contains(new Point(x - i, y))) {
//有五个就为true
if (count == MAX_COUNT_IN_LINE) {
for (int i = 1; i & MAX_COUNT_IN_LINE; i++) {
if (points.contains(new Point(x + i, y))) {
//有五个就为true
if (count == MAX_COUNT_IN_LINE) {
* 判断纵向的棋子
* @param x
* @param y
* @param points
private boolean checkVertical(int x, int y, List points) {
//棋子标记,记录是否有五个
=1是因为自身是一个
int count = 1;
for (int i = 1; i & MAX_COUNT_IN_LINE; i++) {
if (points.contains(new Point(x, y - i))) {
//有五个就为true
if (count == MAX_COUNT_IN_LINE) {
for (int i = 1; i & MAX_COUNT_IN_LINE; i++) {
if (points.contains(new Point(x, y + i))) {
//有五个就为true
if (count == MAX_COUNT_IN_LINE) {
* 判断左斜向的棋子
* @param x
* @param y
* @param points
private boolean checkLeft(int x, int y, List points) {
//棋子标记,记录是否有五个
=1是因为自身是一个
int count = 1;
for (int i = 1; i & MAX_COUNT_IN_LINE; i++) {
if (points.contains(new Point(x - i, y + i))) {
//有五个就为true
if (count == MAX_COUNT_IN_LINE) {
for (int i = 1; i & MAX_COUNT_IN_LINE; i++) {
if (points.contains(new Point(x + i, y - i))) {
//有五个就为true
if (count == MAX_COUNT_IN_LINE) {
* 判断右斜向的棋子
* @param x
* @param y
* @param points
private boolean checkRight(int x, int y, List points) {
//棋子标记,记录是否有五个
=1是因为自身是一个
int count = 1;
for (int i = 1; i & MAX_COUNT_IN_LINE; i++) {
if (points.contains(new Point(x - i, y - i))) {
//有五个就为true
if (count == MAX_COUNT_IN_LINE) {
for (int i = 1; i & MAX_COUNT_IN_LINE; i++) {
if (points.contains(new Point(x + i, y + i))) {
//有五个就为true
if (count == MAX_COUNT_IN_LINE) {
这样,我们运行一下
嘿嘿,好玩吧!
五.游戏状态存储
这个就是当我们游戏挂后台之后,再回来游戏就没了,我们应该存储他的状态,让他每一次进入的时候要是上一句没有下完接着下,那我们该怎么去实现呢?和Activity一样,我们View也有存储状态的方法
* 存储状态
protected Parcelable onSaveInstanceState() {
Bundle bundle = new Bundle();
bundle.putParcelable(INSTANCE, super.onSaveInstanceState());
bundle.putBoolean(INSTANCE_GAMEOVER, mIsGameOver);
bundle.putParcelableArrayList(INSTANCE_WHITE_ARRAY, mWhiteArray);
bundle.putParcelableArrayList(INSTANCE_BLACK_ARRAY, mBlackArray);
* 重新运行
* @param state
protected void onRestoreInstanceState(Parcelable state) {
if (state instanceof Bundle) {
Bundle bundle = (Bundle)
mIsGameOver = bundle.getBoolean(INSTANCE_GAMEOVER);
mWhiteArray = bundle.getParcelableArrayList(INSTANCE_WHITE_ARRAY);
mBlackArray = bundle.getParcelableArrayList(INSTANCE_BLACK_ARRAY);
super.onRestoreInstanceState(bundle.getParcelable(INSTANCE));
super.onRestoreInstanceState(state);
这样就可以了,但是,有一点要知道,不要忘记在布局文件上给控件加上ID,不然状态不会存储哦
六.再来一局
既然我们的游戏逻辑差不多了,那我们应该考虑一下当你胜利的时候,你是不是应该再来一局,所以我们还要实现这个逻辑,这个很简单
* 再来一局
public void RestartGame() {
mWhiteArray.clear();
mBlackArray.clear();
mIsGameOver =
mIsWhiteWin =
invalidate();
这样,我们就可以直接调用了,我们来看看MainActivity
package com.lgl.
import android.support.design.widget.FloatingActionB
import android.support.v7.app.AppCompatA
import android.os.B
import android.view.V
* 五子棋游戏
public class MainActivity extends AppCompatActivity {
//重来按钮
private FloatingActionB
private GameV
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
game = (GameView) findViewById(R.id.mGameView);
fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
game.RestartGame();
OK,我们最终运行一下
OK,到这里,就算开发完成了
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'

参考资料

 

随机推荐