Ⅰ (完整word版)纯C语言写的一个小型游戏 源代码
"扫雷"小游戏C代码
#include<stdio.h>
#include<math.h>
#include<time.h>
#include<stdlib.h>
main( )
{char a[102][102],b[102][102],c[102][102],w;
int i,j; /*循环变量*/
int x,y,z[999]; /*雷的位置*/
int t,s; /*标记*/
int m,n,lei; /*计数*/
int u,v; /*输入*/
int hang,lie,ge,mo; /*自定义变量*/
srand((int)time(NULL)); /*启动随机数发生器*/
leb1: /*选择模式*/
printf("
请选择模式:
1.标准 2.自定义
");
scanf("%d",&mo);
if(mo==2) /*若选择自定义模式,要输入三个参数*/
{do
{t=0; printf("请输入
行数 列数 雷的个数
");
scanf("%d%d%d",&hang,&lie,&ge);
if(hang<2){printf("行数太少
"); t=1;}
if(hang>100){printf("行数太多
");t=1;}
if(lie<2){printf("列数太少
");t=1;}
if(lie>100){printf("列数太多
");t=1;}
if(ge<1){printf("至少要有一个雷
");t=1;}
if(ge>=(hang*lie)){printf("雷太多了
");t=1;}
}while(t==1);
}
else{hang=10,lie=10,ge=10;} /*否则就是选择了标准模式(默认参数)*/
for(i=1;i<=ge;i=i+1) /*确定雷的位置*/
{do
{t=0; z[i]=rand( )%(hang*lie);
for(j=1;j<i;j=j+1){if(z[i]==z[j]) t=1;}
}while(t==1);
}
for(i=0;i<=hang+1;i=i+1) /*初始化a,b,c*/
{for(j=0;j<=lie+1;j=j+1) {a[i][j]='1'; b[i][j]='1'; c[i][j]='0';} }
for(i=1;i<=hang;i=i+1)
{for(j=1;j<=lie;j=j+1) {a[i][j]='+';} }
for(i=1;i<=ge;i=i+1) /*把雷放入c*/
{x=z[i]/lie+1; y=z[i]%lie+1; c[x][y]='#';}
for(i=1;i<=hang;i=i+1) /*计算b中数字*/
{for(j=1;j<=lie;j=j+1)
{m=48;
if(c[i-1][j-1]=='#')m=m+1; if(c[i][j-1]=='#')m=m+1;
if(c[i-1][j]=='#')m=m+1; if(c[i+1][j+1]=='#')m=m+1;
if(c[i][j+1]=='#')m=m+1; if(c[i+1][j]=='#')m=m+1;
if(c[i+1][j-1]=='#')m=m+1; if(c[i-1][j+1]=='#')m=m+1;
b[i][j]=m;
}
}
for(i=1;i<=ge;i=i+1) /*把雷放入b中*/
{x=z[i]/lie+1; y=z[i]%lie+1; b[x][y]='#';}
lei=ge; /*以下是游戏设计*/
do
{leb2: /*输出*/
system("cls");printf("
");
printf(" ");
for(i=1;i<=lie;i=i+1)
{w=(i-1)/10+48; printf("%c",w);
w=(i-1)%10+48; printf("%c ",w);
}
printf("
|");
for(i=1;i<=lie;i=i+1){printf("---|");}
printf("
");
for(i=1;i<=hang;i=i+1)
{w=(i-1)/10+48; printf("%c",w);
w=(i-1)%10+48; printf("%c |",w);
for(j=1;j<=lie;j=j+1)
{if(a[i][j]=='0')printf(" |");
else printf(" %c |",a[i][j]);
}
if(i==2)printf(" 剩余雷个数");
if(i==3)printf(" %d",lei);
printf("
|");
for(j=1;j<=lie;j=j+1){printf("---|");}
printf("
");
}
scanf("%d%c%d",&u,&w,&v); /*输入*/
u=u+1,v=v+1;
if(w!='#'&&a[u][v]=='@')
goto leb2;
if(w=='#')
{if(a[u][v]=='+'){a[u][v]='@'; lei=lei-1;}
else if(a[u][v]=='@'){a[u][v]='?'; lei=lei+1;}
else if(a[u][v]=='?'){a[u][v]='+';}
goto leb2;
}
a[u][v]=b[u][v];
leb3: /*打开0区*/
t=0;
if(a[u][v]=='0')
{for(i=1;i<=hang;i=i+1)
{for(j=1;j<=lie;j=j+1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;
if(a[i-1][j]=='0')s=1; if(a[i+1][j-1]=='0')s=1;
if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1; if(a[i][j+1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=1;i<=hang;i=i+1)
{for(j=lie;j>=1;j=j-1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;
if(a[i-1][j]=='0')s=1; if(a[i+1][j-1]=='0')s=1;
if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1; if(a[i][j+1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=hang;i>=1;i=i-1)
{for(j=1;j<=lie;j=j+1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;
if(a[i-1][j]=='0')s=1; if(a[i+1][j-1]=='0')s=1;
if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1; if(a[i][j+1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=hang;i>=1;i=i-1)
{for(j=lie;j>=1;j=j-1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;
if(a[i-1][j]=='0')s=1; if(a[i+1][j-1]=='0')s=1;
if(a[i+1][j+1]=='0')s=1;if(a[i+1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1; if(a[i][j+1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=1;i<=hang;i=i+1) /*检测0区*/
{for(j=1;j<=lie;j=j+1)
{if(a[i][j]=='0')
{if(a[i-1][j-1]=='+'||a[i-1][j-1]=='@'||a[i-1][j-1]=='?')t=1;
if(a[i-1][j+1]=='+'||a[i-1][j+1]=='@'||a[i-1][j+1]=='?')t=1;
if(a[i+1][j-1]=='+'||a[i+1][j-1]=='@'||a[i+1][j-1]=='?')t=1;
if(a[i+1][j+1]=='+'||a[i+1][j+1]=='@'||a[i+1][j+1]=='?')t=1;
if(a[i+1][j]=='+'||a[i+1][j]=='@'||a[i+1][j]=='?')t=1;
if(a[i][j+1]=='+'||a[i][j+1]=='@'||a[i][j+1]=='?')t=1;
if(a[i][j-1]=='+'||a[i][j-1]=='@'||a[i][j-1]=='?')t=1;
if(a[i-1][j]=='+'||a[i-1][j]=='@'||a[i-1][j]=='?')t=1;
}
}
}
if(t==1)goto leb3;
}
n=0; /*检查结束*/
for(i=1;i<=hang;i=i+1)
{for(j=1;j<=lie;j=j+1)
{if(a[i][j]!='+'&&a[i][j]!='@'&&a[i][j]!='?')n=n+1;}
}
}
while(a[u][v]!='#'&&n!=(hang*lie-ge));
for(i=1;i<=ge;i=i+1) /*游戏结束*/
{x=z[i]/lie+1; y=z[i]%lie+1; a[x][y]='#'; }
printf(" ");
for(i=1;i<=lie;i=i+1)
{w=(i-1)/10+48; printf("%c",w);
w=(i-1)%10+48; printf("%c ",w);
}
printf("
|");
for(i=1;i<=lie;i=i+1){printf("---|");}
printf("
");
for(i=1;i<=hang;i=i+1)
{w=(i-1)/10+48; printf("%c",w);
w=(i-1)%10+48; printf("%c |",w);
for(j=1;j<=lie;j=j+1)
{if(a[i][j]=='0')printf(" |");
else printf(" %c |",a[i][j]);
}
if(i==2)printf(" 剩余雷个数");
if(i==3)printf(" %d",lei); printf("
|");
for(j=1;j<=lie;j=j+1) {printf("---|");}
printf("
");
}
if(n==(hang*lie-ge)) printf("你成功了!
");
else printf(" 游戏结束!
");
printf(" 重玩请输入1
");
t=0;
scanf("%d",&t);
if(t==1)goto leb1;
}
/*注:在DEV c++上运行通过。行号和列号都从0开始,比如要确定第0行第9列不是“雷”,就在0和9中间加入一个字母,可以输入【0a9】三个字符再按回车键。3行7列不是雷,则输入【3a7】回车;第8行第5列是雷,就输入【8#5】回车,9行0列是雷则输入【9#0】并回车*/
Ⅱ 澶ц仈鐩熸父鎴忔簮镰
涓嬭浇鍦板潃锛http://www.xyx09.com/240220/
绫诲瀷锛氩畨鍗撴父鎴-瑙掕壊镓婕
鐗堟湰锛历1.0
澶у皬锛0KB
璇瑷锛氢腑鏂
骞冲彴锛氩畨鍗揂PK
鎺ㄨ崘鏄熺骇锛堣瘎鍒嗭级锛气槄钸呪槄钸呪槄
娓告垙镙囩: 姝︽滠澶ц仈鐩 姝︽滠娓告垙 瑙掕壊镓婕 姝︽滠澶ц仈鐩熸坠娓鏄涓娆鹃潪甯哥粡鍏歌掕壊镓婕旂被姝︿緺镓嬫父锛岃繖娆炬父鎴忚缮铡熶简瓒呭氭︿緺鐗囨碉纴璁╃帺瀹惰兘鍗佽冻镄勮繃涓鎶婅嫳闆勭樉锛屽甫棰呜嚜宸辩殑锲㈤槦璧板悜浜虹敓镄勫穮宄帮纴镒熷叴瓒g殑链嫔弸璧剁揣𨱒ヤ笅杞借瘯鐜╁惂锛
姝︽滠澶ц仈鐩熸父鎴忎粙缁嶆病钀界殑姝︽滠闇瑕佷綘镄勬晳璧庯纴鍗庡北璁哄墤涓婂啀璁哄穮宄般
鏁扮栌绉嶆﹀︿换镒忔惌閰嶏纴钖堜簲缁濅箣锷燂纴褰揿ぉ涓嬬旱妯锛
链夎缉楂樿嚜鐢卞害镄勪竴娆炬︿緺娓告垙銆
姝︽滠澶ц仈鐩熸坠娓哥壒镩1.渚犲㈠吇鎴愰厌棣嗘嫑鍕燂纴缂桦垎绯荤粺鎻愬崌鑻遍泟瀹炲姏锛
2.姹熸箹闂ㄦ淳鎴愪负寮娲惧畻甯堬纴缁濅笘姝﹀姛闇囨捈姹熸箹锛
3.杩涢桩鍗囩骇锲炲悎鍒舵垬鏂楋纴寮鍒涙︽滠镄勭洓涓栵紒
姝︽滠澶ц仈鐩熸渶鏂扮増浼桦娍3D瑙掕壊锛岀獊镰村钩闱锛佹槸钖︾湅鑵2D鍗$墝镄勬坠链烘父鎴忥纻𨱒ヨ瘯璇曟︽滠闇镐笟钖э紒
钖堜綋閰风偒锛岀埥鍒扮庡睆锛佹墍链変緺瀹㈤兘鍙浠ユ斁钖堜綋澶ф嫑銆傛潹杩囬緳濂抽绨涓婂満锛岄儹闱栭粍钃夋柀𨱒ュ皢锛岄摐灏搁搧灏稿悜澶╁殠锛屼笢闾瑗挎瘨澶╀笅鍊撅紒
涓镐ц掕壊锛屾茬舰涓嶈兘锛佷釜镐у垎鏄庤╀綘鐖变笉閲婃坠锛屾疮涓閮借荆涔埚彲鐖憋纴杩树笉蹇涓嬭浇浣挞獙涓鐣锛
姝︽滠澶ц仈鐩熸父鎴忔殏链涓婄嚎锛屽厛鎻愪緵钖岀被娓告垙涓嬭浇锛屾暚璇疯皡瑙o紒
镐荤粨钥岃█锛屽ⅷ楸间笅杞芥槸鎭ㄥ绘垒瀹夊崜娓告垙鍜岃掕壊镓婕斾笅杞界殑鐞嗘兂涔嬮夈傛垜浠涓烘偍绮鹃変简涓绯诲垪瀹夊崜娓告垙鍜岃掕壊镓婕旂殑鐩稿叧鍐呭癸纴镞犺烘偍鏄瀹夊崜娓告垙瑙掕壊镓婕旂殑鍒濆﹁呰缮鏄涓扑笟浜哄+锛岄兘鑳芥弧瓒虫偍镄勯渶姹伞傚湪鎴戜滑镄勪笅杞界珯锛屾偍鍙浠ヨ交𨱒炬垒鍒版渶鏂扮殑姝︽滠澶ц仈鐩熸父鎴忛珮阃熶笅杞斤纴浜鍙楀畨鍗撴父鎴忚掕壊镓婕斿甫𨱒ョ殑镞犲敖涔愯叮锛佹垜浠鎻愪緵璇︾粏镄勬︽滠澶ц仈鐩熸父鎴忛珮阃熶笅杞戒俊鎭锛屽寘𨰾锷熻兘浠嬬粛銆佺敤鎴疯瘎浠蜂互鍙婂畼鏂逛笅杞介摼鎺http://www.xyx09.com/240220/ 锛岃╂偍镄勪笅杞借繃绋嬫洿锷犺交𨱒惧揩鎹凤紒姝ゅ栵纴鎴戜滑杩樻彁渚涗竴绯诲垪涓庡畨鍗撴父鎴忚掕壊镓婕旂浉鍏崇殑鏁欑▼鍜岃祫璁锛屽府锷╂偍镟村ソ鍦颁简瑙e拰浣跨敤杩欎簺浜у搧銆傛垜浠镄勫洟阒熸椂鍒诲叧娉ㄥ畨鍗撴父鎴忚掕壊镓婕旂殑链鏂板姩镐侊纴涓烘偍鎻愪緵链鏂扮殑淇℃伅鍜屼笅杞介摼鎺ャ傚湪澧ㄩ奔涓嬭浇锛屾垜浠镊村姏浜庝负鎭ㄦ彁渚涙渶濂界殑瀹夊崜娓告垙瑙掕壊镓婕斾笅杞戒綋楠屻傛垜浠鐩镐俊锛屽湪鎴戜滑镄勫姫锷涗笅锛屾偍涓瀹氲兘镓惧埌链阃傚悎鎭ㄧ殑瀹夊崜娓告垙瑙掕壊镓婕旇В鍐虫柟妗堛傚揩𨱒ヤ綋楠屾垜浠镄勬湇锷″惂锛http://www.xyx09.com/
Ⅲ cocos2d-x集成anychat行不行
一、功能描述、SDK版本和帐号准备
功能大致是这样的:在游戏中设置一个按钮,点击这个按钮,弹出知名社交平台的分享图标集窗口,用户选择分享目标后,相关信息分享到对应的社交平台。分享结果通知通过Toast显示在屏幕的下方。
这次依旧使用ShareSDK for android 2.3.7版本(ShareSDK-Android-2.3.7),Cocos2d-x的版本为3.0rc2。
集成前,你需要有一个基于Cocos2d-x 3.0rc2的可运行的Android平台游戏project,我们的集成就基于该project,这里我们的project名为GameDemo,GameDemo的源码结构大致是:
复制代码 代码如下:
GameDemo/
– Classes/
– proj.android/
– Resources/
– cocos2d/
– CMakeLists.txt
– … …
使用ShareSDK前,你需要在各大主流社交平台(微信、微博)申请开发者帐号以及游戏接入权限(app_key、app_secret)等,当然在ShareSDK站点也应该有自己的帐号和应用AppKey,这些申请的审核需要几个工作日,甚至更长。
二、ShareSDK集成步骤
按照ShareSDK官方manual说法,Cocos2d-x集成ShareSDK有三种方式,之前在Cocos2d-x 2.2.2引擎中采用的是专用组件集成的方式,该组件(C2DXShareSDKSample)可以在这里下载(https://github.com/ShareSDKPlatform/C2DXShareSDKSample,该组件近期已经fix了我之前发现的bug)。
1.jar包集成
这次我们主要做微博、微信的社交分享,因此只需要微博、微信相关jar包。在C2DXShareSDKSample/proj.android/libs下,我们找到以下几个jar包:
复制代码 代码如下:
-rw-rw-r– 1 tony tony 97K 4月 8 18:10 mframework.jar
-rw-rw-r– 1 tony tony 112K 4月 8 17:39 ShareSDK-Core-2.3.7.jar
-rw-rw-r– 1 tony tony 19K 4月 8 17:39 ShareSDK-SinaWeibo-2.3.7.jar
-rw-rw-r– 1 tony tony 4.3K 4月 8 17:39 ShareSDK-Wechat-2.3.7.jar
-rw-rw-r– 1 tony tony 29K 4月 8 17:39 ShareSDK-Wechat-Core-2.3.7.jar
-rw-rw-r– 1 tony tony 4.6K 4月 8 17:39 ShareSDK-Wechat-Favorite-2.3.7.jar
-rw-rw-r– 1 tony tony 4.4K 4月 8 17:39 ShareSDK-Wechat-Moments-2.3.7.jar
把这些jar包文件Copy到GameDemo/proj.android/libs下。
2. 配置文件与资源部分集成
修改GameDemo/proj.android/AndroidManifest.xml文件,在application标签下,添加如下Activity标签:
复制代码 代码如下:
<activity
android:name="cn.sharesdk.framework.ShareSDKUIShell"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:windowSoftInputMode="stateHidden|adjustResize" >
</activity>
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
将C2DXShareSDKSample/proj.android/res下的如下目录中的文件复制到GameDemo/proj.android/res下:
复制代码 代码如下:
drawable-hdpi/ drawable-ldpi/ drawable-mdpi/
drawable-xhdpi/ layout/ values/ values-en/
注意,类似icon.png这种文件就不要复制了,自己做一下判断就好。
3. C++部分代码集成
将C2DXShareSDKSample/Classes下的C2DXShareSDK文件夹Copy到GameDemo/Classes下面。
由于Cocos2d-x 3.0rc2的类命名发生了变化,我们需要对C2DXShareSDK中使用到的引擎中的类名以及方法名进行修改。但实际上Cocos2d-x 3.0rc2考虑到了一些兼容性的问题,大部分名字通过cocos2d/cocos/deprecated/CCDeprecated.h中定义的typedef得以保留,虽然这些名字已经被建议deprecated了。rc2中CCObject被改名为Ref了,这个我们需要手工在C2DXShareSDK进行修改。
另外ShareSDK组件在实现时大量使用了CCDictionary、CCArray和CCString,而这三个类在Cocos2d-x 3.0rc2中均被deprecated了,但我们依然可以使用,所以我们可以不做修改。但以后随着cocos2d-x版本的演进,这些类很可能被彻底移除出引擎,我们就需要重新使用其替代品进行实现了。
此外我们还需要手工修改一下C2DXShareSDK/Android/JSON/CCJSONConverter.cpp文件中的getObjJson方 法,因为rc2中CCDictionary、CCString、CCArray这些类的真实名称都已经换成了__Dictionary、__String 和__Array,CCDictionary、CCString、CCArray只是些typedef,因此要像下面这样做些修改(如果你是集成 cocos2d-x 2.x.x版本,则无需做下面修改):
复制代码 代码如下:
cJSON * CCJSONConverter::getObjJson(Ref * obj)
{
std::string s = typeid(*obj).name();
if(s.find("__Dictionary")!=std::string::npos){
cJSON * json = cJSON_CreateObject();
convertDictionaryToJson((CCDictionary *)obj, json);
return json;
}else if(s.find("__Array")!=std::string::npos){
cJSON * json = cJSON_CreateArray();
convertArrayToJson((CCArray *)obj, json);
return json;
}else if(s.find("__String")!=std::string::npos){
CCString * s = (CCString *)obj;
cJSON * json = cJSON_CreateString(s->getCString());
return json;
}else if(s.find("CCNumber")!=std::string::npos){
CCNumber * n = (CCNumber *)obj;
cJSON * json = cJSON_CreateNumber(n->getDoubleValue());
return json;
}else if(s.find("CCNull")!=std::string::npos){
cJSON * json = cJSON_CreateNull();
return json;
}
CCLog("CCJSONConverter encountered an unrecognized type");
return NULL;
}
CCNumber和CCNull是ShareSDK组件自己实现的类名,这里无需修改。
接下来我们需要在AppDelegate.cpp中对ShareSDK做初始化了:
复制代码 代码如下:
bool AppDelegate::applicationDidFinishLaunching() {
… …
initShareSDK();
… ..
}
void AppDelegate::initShareSDK()
{
// sina weibo
CCDictionary *sinaConfigDict = CCDictionary::create();
sinaConfigDict->setObject(CCString::create("YOUR_WEIBO_APPKEY"), "app_key");
sinaConfigDict->setObject(CCString::create("YOUR_WEBIO_APPSECRET"), "app_secret");
sinaConfigDict->setObject(CCString::create("http://www.sharesdk.cn"), "redirect_uri");
C2DXShareSDK::setPlatformConfig(C2DXPlatTypeSinaWeibo, sinaConfigDict);
// wechat
CCDictionary *wcConfigDict = CCDictionary::create();
wcConfigDict->setObject(CCString::create("YOUR_WECHAT_APPID"), "app_id");
C2DXShareSDK::setPlatformConfig(C2DXPlatTypeWeixiSession, wcConfigDict);
C2DXShareSDK::setPlatformConfig(C2DXPlatTypeWeixiTimeline, wcConfigDict);
C2DXShareSDK::setPlatformConfig(C2DXPlatTypeWeixiFav, wcConfigDict);
C2DXShareSDK::open(CCString::create("YOUR_SHARESDK_APPKEY"), false);
}
在Share按钮的事件回调函数中调用ShareSDK的接口进行社交平台分享:
复制代码 代码如下:
void GameScene::menuShareCallback(Ref* sender)
{
Dictionary *content = Dictionary::create();
content->setObject(String::create("ShareSDK for Cocos2d-x 3.0rc2社交分享测试。")