Ⅰ (完整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社交分享測試。")