设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

『从零开始』每天写个小游戏

查看数: 4059 | 评论数: 26 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2013-11-30 09:17

正文摘要:

本帖最后由 maweiblue 于 2013-11-30 14:00 编辑 平时很喜欢研究游戏技术,也用工具做过几个小游戏,但总是感觉很有局限性,所以下定决心,开始学习编程,虽然没有什么基础,但相信天道酬勤,只要坚持下来,总会 ...

回复

李光兆 发表于 2013-12-3 12:42:29
脚本触触们等做到了一定程度记得打包发给我们这些广大渣渣群众w
awedcvgyujm 发表于 2013-12-3 12:37:15
本帖最后由 awedcvgyujm 于 2013-12-3 12:43 编辑

以前用java写过一个游戏
结果控场技能不够没法驾驭这么大的软件最后坑掉了_(:з」∠)_



但还是不得不说java真的很方便
艾拉梅德 发表于 2013-12-3 02:12:16
本帖最后由 艾拉梅德 于 2013-12-2 19:15 编辑

前几天才做完的c++黑白棋游戏,老师要求写3种文件……嗯,显示语言是法语

第一个hpp
  1. #include "header.h"
  2. #include <iostream>
  3. #include <string>

  4. using namespace std;

  5. void Plateau::affiche() const
  6. {
  7.     int i, j;
  8.     cout <<endl;
  9.     cout << "  0 1 2 3 4 5 6 7 "<<endl;
  10.     cout << " ================ "<<endl;
  11.     for (i=0;i<MAX;i++){
  12.         for (j=0; j<MAX;j++){
  13.                 if (j==0)
  14.                     cout <<i <<" " <<p_plateau[i][j];
  15.                 else if (j==MAX-1)
  16.                     cout << " " <<p_plateau[i][j]<< " "<< i;
  17.                 else
  18.                     cout << " "<<p_plateau[i][j];}
  19.             cout << endl;}

  20.     cout << " ================ "<<endl;
  21.     cout << "  0 1 2 3 4 5 6 7"<<endl;
  22.     cout <<endl;
  23. }


  24. int Plateau::reste()
  25. {
  26.     int n=0;
  27.     for (int i=0;i<MAX;i++)
  28.     {
  29.         for (int j=0;j<MAX;j++)
  30.         {
  31.             if (p_plateau[i][j]==V)
  32.                 n++;
  33.         }
  34.     }
  35.     return n;
  36. }

  37. void Plateau::pion_trans(const int ligne, const int colone, const int tour)
  38. {
  39.     if (tour==0)
  40.         p_plateau[ligne][colone]=B;
  41.     else
  42.         p_plateau[ligne][colone]=N;
  43. }

  44. int Plateau::calcul_score(const char nom)
  45. {
  46.     int n=0;
  47.     for (int i=0; i<MAX; i++)
  48.     {
  49.         for (int j=0; j < MAX; j++)
  50.         {
  51.             if (p_plateau[i][j]==nom)
  52.                 n++;
  53.         }
  54.     }
  55.     return n;
  56. }

  57. void Joueur::saisirnom(const int i)
  58. {
  59.     string nom;
  60.     cout << "Quel est le nom de joueur"<< i << "?"<<endl;
  61.     cin >> nom;
  62.     j_nom=trans_nom(nom);
  63. }

  64. string Joueur::trans_nom(string nom)
  65. {
  66.     for (int i=1;i<nom.length();i++)
  67.     nom[i]=tolower(nom[i]);
  68.     nom[0]=toupper(nom[0]);
  69.     return nom;
  70. }

  71. int Joueur::change_score(const int n)
  72. {
  73.     j_score=n;
  74.     return j_score;
  75. }

  76. void Jeu::commence()
  77. {
  78.     j1.saisirnom(1);
  79.     j2.saisirnom(2);
  80.     joueurCourant=0;
  81.     cout << "Donc le blanc commence. C'est le tour de "<< j1.getnom() <<endl;
  82.     cout << B<< ":pour le pion blanc"<< "   "<< N<< ":pour le pion noir"<<endl;
  83.     p.affiche();
  84.     run();
  85. }

  86. void Jeu::saisir(const int tour)
  87. {
  88.     int ligne, colone, n;
  89.     cout << "Quel ligne vous voulez placer votre pion? ligne(0-7)"<<endl;
  90.     cin>> ligne;
  91.     while (ligne < 0 || ligne > 7)
  92.     {
  93.         cout << "Erreur, resaisir"<<endl;
  94.         cin>> ligne;
  95.     }
  96.     cout << "Quel colone vous voulez placer votre pion? colone(0-7)"<<endl;
  97.     cin>> colone;
  98.     while (colone < 0 || colone > 7)
  99.     {
  100.         cout << "Erreur, resaisir"<<endl;
  101.         cin>> colone;
  102.     }
  103.     if (!p.determiner_vide(ligne,colone))//si ce n'est pas vide
  104.     {
  105.         cout << "Ici il y a deja un pion"<<endl;
  106.         saisir(tour);
  107.     }
  108.     else{
  109.             n= p.determiner(ligne, colone, tour);
  110.         if (n==0)
  111.         {
  112.             cout << "Ce n'est pas une place valide"<<endl;
  113.             p.affiche();
  114.             saisir(tour);

  115.         }
  116.         else
  117.         {
  118.             cout << "C'est une place valide"<<endl;
  119.             score();
  120.             p.affiche();
  121.         }

  122.     }
  123. }

  124. void Jeu::run()
  125. {
  126.     while (p.reste() != 0)
  127.     {
  128.         if (p.skip(joueurCourant))//s'il n'y plus de place, saute
  129.         {
  130.             cout << "Car il n'y pas de place, donc maintenant c'est le tour de joueur "<< joueurCourant+2<<endl;
  131.             joueurCourant=(joueurCourant+1)%2;
  132.         }
  133.         if (joueurCourant==0)
  134.             cout << j1.getnom()<<", placez votre pion."<<endl;
  135.         else
  136.             cout << j2.getnom()<<", placez votre pion."<<endl;
  137.         saisir(joueurCourant);
  138.         joueurCourant=(joueurCourant+1)%2;
  139.     }
  140.     fin();
  141. }

  142. bool Plateau::skip(const int tour)
  143. {
  144.     int cpt=0, i, j;
  145.     char type;
  146.     if (tour==0)
  147.         type=B;
  148.     else
  149.         type=N;
  150.     for (i=0;i<MAX;i++)
  151.     {
  152.         for(j=0;j<MAX;j++)
  153.         {
  154.             if (p_plateau[i][j]==V)
  155.             {
  156.                 cpt+=determiner(i, j, tour, false);
  157.             }
  158.         }
  159.     }
  160.     return (cpt==0);
  161. }

  162. bool Plateau::determiner_vide(const int ligne, const int colone)
  163. {
  164.     return (p_plateau[ligne][colone]==V);
  165. }

  166. int Plateau::determiner(const int i, const int j, const int tour, bool skip)
  167. {
  168.     int ligne=i,colone=j , n=0, cpt;
  169.     char type;
  170.     if (tour==0)
  171.         type=B;
  172.     else
  173.         type=N;
  174.     //haut
  175.     if (i != 0){
  176.         while (ligne >= 0 && (p_plateau[ligne-1][colone]!=type && p_plateau[ligne-1][colone]!=V))
  177.         {
  178.             ligne--;}
  179.         if (p_plateau[ligne-1][colone]==type)
  180.         {
  181.             n+=(i-ligne);
  182.             if (skip != false){
  183.             for (cpt=i-1;cpt>ligne-1;cpt--)
  184.             {
  185.                 pion_trans(cpt, colone, tour);
  186.             }}
  187.         }
  188.     }
  189.     ligne=i,colone=j;
  190.     //haut droit
  191.     if (i != 0 && j != MAX-1){
  192.         while ((ligne >= 0 && colone < MAX) && (p_plateau[ligne-1][colone+1]!=type && p_plateau[ligne-1][colone+1]!=V))
  193.         {
  194.             ligne--;
  195.             colone++;
  196.         }
  197.             if (p_plateau[ligne-1][colone+1]==type)
  198.             {
  199.                 n+=(i-ligne);
  200.                 if (skip != false){
  201.                 ligne=i,colone=j;
  202.                 while ((ligne >= 0 && colone < MAX) && (p_plateau[ligne-1][colone+1]!=type && p_plateau[ligne-1][colone+1]!=V))
  203.                 {
  204.                     ligne--;
  205.                     colone++;
  206.                     pion_trans(ligne, colone, tour);
  207.                 }}
  208.         }}
  209.     ligne=i,colone=j;
  210.     //droit
  211.     if (j != MAX-1){
  212.     while (colone < MAX && (p_plateau[ligne][colone+1]!=type && p_plateau[ligne][colone+1]!=V))
  213.     {

  214.         colone++;}
  215.         if (p_plateau[ligne][colone+1]==type)
  216.         {
  217.             n+=(colone-j);
  218.             if (skip != false){
  219.             for (cpt=j+1;cpt<colone+1;cpt++)
  220.             {
  221.                 pion_trans(ligne, cpt, tour);
  222.             }}
  223.         }
  224.     }
  225.     ligne=i,colone=j;
  226.     //bas droit
  227.     if (i != MAX-1 && j != MAX-1){
  228.     while ((ligne < MAX && colone < MAX) && (p_plateau[ligne+1][colone+1]!=type && p_plateau[ligne+1][colone+1]!=V))
  229.     {
  230.         ligne++;
  231.         colone++;
  232.     }
  233.         if (p_plateau[ligne+1][colone+1]==type)
  234.             {
  235.                 n+=(ligne-i);
  236.             if (skip != false){
  237.                 ligne=i,colone=j;
  238.             while ((ligne < MAX && colone < MAX) && (p_plateau[ligne+1][colone+1]!=type && p_plateau[ligne+1][colone+1]!=V))
  239.             {
  240.                 ligne++;
  241.                 colone++;
  242.                 pion_trans(ligne,colone,tour);
  243.             }}
  244.     }}
  245.     //bas
  246.     ligne=i,colone=j;
  247.     if (i != MAX-1){
  248.     while (ligne < MAX && (p_plateau[ligne+1][colone]!=type && p_plateau[ligne+1][colone]!=V))
  249.     {
  250.         ligne++;}
  251.         if (p_plateau[ligne+1][colone]==type)
  252.         {
  253.             n+=(ligne-i);
  254.             if (skip != false){
  255.             for (cpt=i+1;cpt<ligne+1;cpt++)
  256.             {
  257.                 pion_trans(cpt, colone, tour);
  258.             }
  259.         }}
  260.     }
  261.     //bas gauche
  262.     ligne=i,colone=j;
  263.     if (i != MAX-1 && j != 0){
  264.     while ((ligne < MAX && colone >=0) && (p_plateau[ligne+1][colone-1]!=type && p_plateau[ligne+1][colone-1]!=V))
  265.     {
  266.         ligne++;
  267.         colone--;
  268.     }
  269.         if (p_plateau[ligne+1][colone-1]==type)
  270.             {
  271.                 n+=(ligne-i);
  272.                 if (skip != false){
  273.                 ligne=i,colone=j;
  274.             while ((ligne < MAX && colone >=0) && (p_plateau[ligne+1][colone-1]!=type && p_plateau[ligne+1][colone-1]!=V))
  275.             {
  276.                 ligne++;
  277.                 colone--;
  278.                 pion_trans(ligne,colone,tour);
  279.             }}
  280.     }}
  281.     //gauche
  282.     ligne=i,colone=j;
  283.     if (i != 0){
  284.     while (ligne > 0 && (p_plateau[ligne][colone-1]!=type && p_plateau[ligne][colone-1]!=V))
  285.     {
  286.         colone--;}
  287.         if (p_plateau[ligne][colone-1]==type)
  288.         {
  289.             n+=(j-colone);
  290.             if (skip != false){
  291.             for (cpt=j-1;cpt>colone-1;cpt--)
  292.             {
  293.                 pion_trans(ligne, cpt, tour);
  294.             }
  295.         }}
  296.     }
  297.     //haut gauche
  298.     ligne=i,colone=j;
  299.     if (i != 0 && j != 0){
  300.     while ((ligne >=0 && colone >=0) && (p_plateau[ligne-1][colone-1]!=type && p_plateau[ligne-1][colone-1]!=V))
  301.     {
  302.         ligne--;
  303.         colone--;
  304.     }
  305.         if (p_plateau[ligne-1][colone-1]==type)
  306.             {
  307.                 n+=(i-ligne);
  308.                 ligne=i,colone=j;
  309.                 if (skip != false){
  310.                 while ((ligne >=0 && colone >=0) && (p_plateau[ligne-1][colone-1]!=type && p_plateau[ligne-1][colone-1]!=V))
  311.                 {
  312.                     ligne--;
  313.                     colone--;
  314.                     pion_trans(ligne,colone,tour);
  315.                 }}
  316.     }}
  317.     if (n > 0 && skip!=false)
  318.         p_plateau[i][j]=type;
  319.     return n;
  320. }

  321. void Jeu::score()
  322. {
  323.     int b=p.calcul_score(B);
  324.     int n=p.calcul_score(N);
  325.     cout << "Le score de joueur 1 "<< j1.getnom()<<" est :" << j1.change_score(b) << endl;
  326.     cout << "Le score de joueur 2 "<< j2.getnom()<<" est :" << j2.change_score(n) << endl;
  327. }

  328. void Jeu::fin()
  329. {
  330.     if (j1.getscore() > j2.getscore())
  331.         cout << "C'est le joueur " << j1.getnom() << " qui a gagne!"<<endl;
  332.     else if (j2.getscore() > j1.getscore())
  333.         cout << "C'est le joueur " << j2.getnom() << " qui a gagne!"<<endl;
  334.     else
  335.         cout << ""<<endl;
  336. }
复制代码
然后主程序
  1. #include <iostream>
  2. #include "header.h"

  3. using namespace std;

  4. int main()
  5. {
  6.     char recommence = 'n';
  7.     cout << "Bienvenue! C'est un jeu d'Othello!" << endl;
  8.     Jeu j;
  9.     do{
  10.     j.commence();
  11.     cout << "Est-ce que vous-voulez recommencer?(o/n)"<<endl;
  12.     cin>>recommence;
  13.     }while (recommence=='o');
  14.     return 0;
  15. }
复制代码
然后最后的.h
  1. #ifndef HEADER_H_INCLUDED
  2. #define HEADER_H_INCLUDED

  3. #include <string>
  4. #include <iostream>
  5. using namespace std;

  6. const char B='o';
  7. const char N='*';
  8. const char V='-'; // pour repr¨¦senter une case vide
  9. const int MAX=8;


  10. class Plateau
  11. {
  12. public:
  13.     Plateau(){}
  14.     void affiche() const;
  15.     int reste();
  16.     bool skip(const int);
  17.     bool determiner_vide(const int, const int);
  18.     void pion_trans(const int, const int, const int);
  19.     int calcul_score(const char);
  20.     int determiner(const int, const int, const int, bool=true);
  21. private:
  22.     char p_plateau[MAX][MAX]={
  23.             {V,V,V,V,V,V,V,V},
  24.             {V,V,V,V,V,V,V,V},
  25.             {V,V,V,V,V,V,V,V},
  26.             {V,V,V,B,N,V,V,V},
  27.             {V,V,V,N,B,V,V,V},
  28.             {V,V,V,V,V,V,V,V},
  29.             {V,V,V,V,V,V,V,V},
  30.             {V,V,V,V,V,V,V,V}};

  31. };

  32. class Joueur
  33. {
  34. public:
  35.     Joueur(int const coul=1, string const nom="Joueur", int const score=0):j_coul(coul), j_nom(nom), j_score(score){}
  36.     void saisirnom(const int);
  37.     string trans_nom(string nom);
  38.     string getnom(){return j_nom;}
  39.     int change_score(const int);
  40.     int getscore(){return j_score;}
  41. private:
  42.     string j_nom ; // le nom du joueur
  43.     int j_coul ; // caract¨¨re repr¨¦sentant le joueur : 1 ou 2
  44.     int j_score ; // le score du joueur pour la partie en cours

  45. };

  46. class Jeu
  47. {
  48. public:
  49.     void commence();
  50.     void saisir(const int);
  51.     void run();
  52.     void score();
  53.     void fin();
  54. private:
  55.     Plateau p; // le plateau de jeu
  56.     Joueur j1, j2; // les 2 joueurs
  57.     int joueurCourant ; //0 si joueur 1, 1 sinon
  58. };
  59. #endif // HEADER_H_INCLUDED
复制代码
大概就这样,这是两个玩家版本,之后还要写电脑AI版本的……
maweiblue 发表于 2013-12-2 13:47:06
论坛好卡。连发了,抱歉。。
maweiblue 发表于 2013-12-2 13:42:37
昨天学了Interface,做个道具类的控制吧,非常简单。
1.接口ITEM
JAVA 代码复制
  1. package com.linuxgame.test;
  2. /**
  3.  * 这个接口定义了物品的一些基本方法,只是一些声明
  4.  * @author Administrator
  5.  *
  6.  */
  7. public interface Item {
  8.         public String getName();
  9.         public void setName(String name);
  10.         void drop();
  11.         void getItem();
  12.  
  13. }


2用一个武器来去实现ITEM
JAVA 代码复制
  1. package com.linuxgame.test;
  2. /**
  3.  * 这个类实现了ITEM接口,功能很少,多了我也不会做,先从简单的开始吧。
  4.  * @author Administrator
  5.  *
  6.  */
  7. public class Weapon implements Item{
  8.         private int id;
  9.         private String itemName;
  10.         public void setName(String name){
  11.                 this.itemName=name;
  12.         }
  13.         public String getName(){
  14.                 return this.itemName;
  15.         }
  16.         public void drop(){
  17.  
  18.                 System.out.println("武器"+this.itemName+"被丢掉了");
  19.         }
  20.         public Weapon(String name){
  21.                 this.itemName=name;
  22.                 System.out.println("系统生成武器"+this.itemName);
  23.         }
  24.         public void getItem(){
  25.                 System.out.println("英雄得到武器"+this.itemName);
  26.  
  27.         }
  28.  
  29. }


3,开始测试。

JAVA 代码复制
  1. package com.linuxgame.test;
  2.  
  3. public class Game03 {
  4.          public static void main(String[] args){
  5.                 //用一个数组来表示生成的ITEM吧,一个游戏中道具可能有几百几千,用数组可能不合适
  6.                 Item[] myitem=new Item[3];
  7.                 myitem[0]=new Weapon("屠龙刀");
  8.                 myitem[1]=new Weapon("杀猪刀");
  9.                 myitem[2]=null;
  10.                 System.out.println("********************");
  11.                 //打怪得到物品
  12.                 myitem[0].getItem();
  13.                 myitem[1].getItem();
  14.  
  15.                 System.out.println("************");
  16.                 myitem[0].drop();
  17.          }
  18. }


运行效果

系统生成武器屠龙刀
系统生成武器杀猪刀
********************
英雄得到武器屠龙刀
英雄得到武器杀猪刀
************
武器屠龙刀被丢掉了

dukesward 发表于 2013-12-2 13:40:59
maweiblue 发表于 2013-12-2 13:10
java的确不容易啊,很少PC游戏是用JAVA写的,当作学习算了,写写小游戏应该可以吧。 ...


这个跟语言没太大关系,java只是安全性较高而已,主要还是跟开发环境(引擎)和游戏类型有关,比如flash里用的就是javascript插件。

点评

这样。。不过java做的游戏还是有很多的,虽然网络应用比较有优势  发表于 2013-12-5 00:04
java 和 javascript 完全是2个东西 就名字像点而已  发表于 2013-12-4 20:16
maweiblue 发表于 2013-12-2 13:12:07
钢炼君2 发表于 2013-11-30 21:23
LZ实在太给力了太感动了,请你研究,变得牛逼之后,做我的脚本猿吧,汗多阿里嘎多 ...

好吧,约定了哦。
maweiblue 发表于 2013-12-2 13:10:57
凝望·流年 发表于 2013-11-30 20:59
之前一直以为JAVA写个游戏不容易,但仔细想想功能比RUBY好

java的确不容易啊,很少PC游戏是用JAVA写的,当作学习算了,写写小游戏应该可以吧。
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-9-30 21:26

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表