尊宝国际娱乐APP下载

设为首页收藏本站

编程十万个为什么,属于程序员的编程论坛

 找回密码
 5秒快速注册
QQ登录 只需一步,快速开始
搜索
查看: 31796|回复: 260
打印 上一主题 下一主题

[C/C++每日一练] C/C++贪吃蛇2011/4/27

  [复制链接]
跳转到指定楼层
传说中的楼主
发表于 2011-4-26 13:03:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PStatus"> 本帖最后由 凌云紫冥 于 2011-5-1 21:15 编辑

编程能力怎么提高呢? 很多有经验的前辈已经给我们指明了道路,那就是实战,自己多上机写代码,但是大部分应该还是局限于书上的例题或者课后的习题等等,而且感觉不是很有成就感,想找一个有意义的程序来练练手。
OK,我们的bcwhy论坛就为大家提供这样一个机会。。那就是写我们小时候常玩的贪吃蛇。
希望来我们bcwhy的同学人人都可以写出贪吃蛇,当然,能写出这个,其他类型的俄罗斯方块,打飞机,坦克大战等等也很容易的有思路了。
在此之前,先做几点说明:
一,
写贪吃蛇的语言要求就是要学会数组,我们前面训练过的链表以及循环控制语句等一些基本的用法,对于一些不常用的函数用法(或者说是初学者可能没接触过的)我会给大家提示,这不是重点,都是非常简单的函数.主要功能都是由控制语句和数组链表来完成的。也就是说
,只要你学了数组,for while等语句学会了链表的基本用法就可以来实现自己好玩又有意义的小游戏.

二,
由于大部分同学都是初学,可能不能熟练使用数组以及语句,所以,我的安排是每天给出贪吃蛇的一部分实现,,当然是非常简单的。但是基础不是很好的还是得动动脑筋才能解决,这样,慢慢的一个一个功能的实现,最终写出一个完整的贪吃蛇,我会给出每天的答案以及最终贪吃蛇源码(仅供参考)
三,
我们写的这个贪吃蛇是在DOS下完成的,也就是我们那个黑底白字的框框里。很多同学看到别人写的都是花花绿绿的非常好看,有的还有音乐等,我可以以紫冥姐姐的人格担保,你能在
DOS下写出这个,你只要花很短的一部分时间来熟悉图形库(比如MFC)就可以写出让别人羡慕的小游戏。

四,
为了使C/C++同学都可以实现这个贪吃蛇,所以我们用面向过程(也就是用函数来组织而不是用类)来实现,当然,学C++的同学想用类封装那也是一件非常容易的事。

五,
最后说一下这个时间的安排,每天实现一部分,大概一个星期(应该还不到)就可以实现我们的贪吃蛇,而我们每天的任务都是非常轻松的。我再次以紫冥姐姐的名义保证,写出这个相信大家的编程能力能上一个台阶,最后,希望大家能够每天抽一点时间来完成这个小任务,还有就是提醒大家别把当天的题目写完就删除了,以后都是要用到的。

六,
我们这里实现的只是一些基本的功能,如果大家想添加一些比如关卡,分数金钱等等可以完成之后自行添加,不懂的可以来bchwy提问,我们会尽量帮大家解决。
如果大家觉得有什么不妥的地方或者有什么疑问可以向我说。
现在,开始我们的贪吃蛇之旅,一天吃上一小块,最后吃成完整的长蛇。
今天的题目是:
定义一个二维数组int game[20][20];对这个数组用你自定义的init函数初始化之后,定义一个ouput函数,要求输出如下图形:(20*20的空心正方形,用来做我们贪吃蛇的围墙)
提示:可以在init函数里面对game数组进行处理,也就是为了形成边框而赋不同的值,以便输出空格和‘*’号。
成功了可以发帖上来看看,嘿嘿。跟其他同学写的对比交流一下,也可以学到不少东西,毕竟一个问题通常有很多种解法。
程序运行效果图如下所示:

答案分析回复可见。

游客,如果您要查看本帖隐藏内容请回复
单选投票, 共有 59 人参与投票
您所在的用户组没有投票权限

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?5秒快速注册
x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 !wechat_share!!wechat_share!
收藏收藏16 转播转播 分享分享5 分享淘帖 顶一个顶一个6 踩一下踩一下

BcWhy版权声明1、本帖可以任何形式转载到任何媒体,但必须带上本贴的URL连接,否则即视为同意支付 1000 元报酬
2、本主题所有言论和图片纯属凌云紫冥个人意见,与本论坛立场无关
3、本主题由该帖子作者凌云紫冥发表,该帖子作者凌云紫冥与本站享有帖子相关版权
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、本站管理员和版主有权不事先通知发贴者而删除本文

!related_be_replied_threads!
令人羡慕的沙发
 楼主| 发表于 2011-4-26 13:06:29 | 只看该作者
由于明天可能又会很忙,,恰好今天非常闲,就提前把题目出了。。。

还有就是关于链表,,我决定还是先不出题,,大家不懂的去看我 链表 那帖子里面的视频教程链接,尽量学懂,,如果还不是很明白也没关系,,等到贪吃蛇的实现需要用到链表的时候我再出题 ,,, 进行详细分析。。
回复 使用道具 举报
冷板凳
 楼主| 发表于 2011-4-26 13:10:31 | 只看该作者
如果想自己亲自动手实现一个小游戏,,那就每天都完成这里的每日一练。就这么简单。。
后天才会出题,,有兴趣写贪吃蛇的同学可以利用这两天好好学习一下链表。
回复 使用道具 举报
4
发表于 2011-4-26 13:13:00 | 只看该作者
沙发都没了
回复 使用道具 举报
5
 楼主| 发表于 2011-4-26 13:15:13 | 只看该作者
冰山点水 发表于 2011-4-26 13:13
沙发都没了

你别跟我说打印一个框框也不会!
链表你有学吗?
回复 使用道具 举报
6
发表于 2011-4-26 13:26:14 | 只看该作者
得洗完澡。。。
回复 使用道具 举报
7
发表于 2011-4-26 13:34:33 | 只看该作者
还没学到哪呢。
回复 使用道具 举报
8
发表于 2011-4-26 13:37:22 | 只看该作者
  1. #include<iostream>
  2. using namespace std;
  3. #define M 20
  4. #define N 20
  5. void Init_Snake();
  6. int main()
  7. {
  8.         Init_Snake();
  9.         return 0;
  10. }
  11. void Init_Snake()
  12. {
  13.         char str[M][N];
  14.         int i,j;
  15.         for(i=0;i<M;i++)
  16.         {
  17.                 for(j=0;j<N;j++)
  18.                 {
  19.                         if(i==0 || j==0 || i==19 || j==19)
  20.                                 str[i][j]='*';
  21.                         else
  22.                                 str[i][j]=' ';
  23.                 }
  24.         }
  25.         for(i=0;i<M;i++)
  26.         {
  27.                 for(j=0;j<N;j++)
  28.                 {
  29.                         cout<<str[i][j]<<' ';
  30.                 }
  31.                 cout<<endl;
  32.         }
  33. }
复制代码
回复 使用道具 举报
9
发表于 2011-4-26 13:44:37 | 只看该作者
  1. #include<iostream>
  2. using namespace std;
  3. #define M 20
  4. #define N 20
  5. class Snake{
  6. public:
  7.         void Init_Snake();
  8. private:
  9.         char str[M][N];
  10. };
  11. int main()
  12. {
  13.         Snake Player;
  14.         Player.Init_Snake();
  15.         return 0;
  16. }
  17. void Snake::Init_Snake()
  18. {
  19.         char str[M][N];
  20.         int i,j;
  21.         for(i=0;i<M;i++)
  22.         {
  23.                 for(j=0;j<N;j++)
  24.                 {
  25.                         if(i==0 || j==0 || i==N-1 || j==N-1 )
  26.                                 str[i][j]='*';
  27.                         else
  28.                                 str[i][j]=' ';
  29.                 }
  30.         }
  31.         for(i=0;i<M;i++)
  32.         {
  33.                 for(j=0;j<N;j++)
  34.                 {
  35.                         cout<<str[i][j]<<' ';
  36.                 }
  37.                 cout<<endl;
  38.         }
  39. }
  40. C++版得封装、、帮我看下细节方面的处理正确不?
复制代码
回复 使用道具 举报
10
 楼主| 发表于 2011-4-26 13:55:21 | 只看该作者
初始化跟打印放一起了。
初始化部分应该作为class的构造函数。
打印函数定义为class 的成员函数
既然是C++的封装,,就不要定义宏。。 可以在类里声明static const int N = 20;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 5秒快速注册
本版积分规则
关闭

BcWhy推荐上一条 /1 下一条

QQ|关于我们|最新帖子|小黑屋|手机版|编程十万个为什么 ( 粤ICP备16108587号-2   GMT+8, 2017-10-19 10:58 , Processed in 0.162928 second(s), 35 queries , File On.
Powered by Discuz! X3.3 © 2001-2017 Comsenz Inc.
快速回复 返回顶部 返回列表
尊宝国际娱乐APP下载亚虎娱乐手机官方网站亚虎国际娱乐齐乐娱乐国际
优乐娱乐齐乐娱乐网优乐娱乐龙8娱乐手机下载
优乐娱乐亚虎娱乐手机官方网站亚虎国际娱乐梦之城娱乐
尊宝国际娱乐APP下载尊宝国际手机首页尊宝国际娱乐城齐乐娱乐国际
优乐娱乐齐乐娱乐网优乐娱乐龙8娱乐手机下载