Project1
标题: 『从零开始』每天写个小游戏 [打印本页]
作者: maweiblue 时间: 2013-11-30 09:17
标题: 『从零开始』每天写个小游戏
本帖最后由 maweiblue 于 2013-11-30 14:00 编辑
平时很喜欢研究游戏技术,也用工具做过几个小游戏,但总是感觉很有局限性,所以下定决心,开始学习编程,虽然没有什么基础,但相信天道酬勤,只要坚持下来,总会有所收获,希望通过一段时间的努力,能做出自己心仪的游戏,在此发帖也是希望给自己个动力,能坚持下去。
语言我选择JAVA,跨平台,入门比较简单,做PC,安卓小游戏都十分适合。
由于没有编程基础,代码写的较挫,请前辈们原谅,能给出意见建议一定虚心接受。
game no.1(11.30)
import java.util.Scanner;
public class MyTest {
/**
* 猜100以内数字的小游戏,最后给出猜的次数,
* @param args
*/
public static void main(String[] args){
//生成一个100的随机数字
int myrandom=(int)(100*Math.random());
//生成一个Scanner对象
Scanner myscanner=new Scanner(System.in);
System.out.print("开始输入你的数字");
//开始接受输入一个数字
int myint=myscanner.nextInt();
//这个用来记录猜的次数
byte testnum=0;
//开始一个循环,如果猜的数字和生成的随机数不同,就提示大小;
while(myint!=myrandom){
if(myint>myrandom){
System.out.println("你猜的数字大了,再来一次吧");
}else{
System.out.println("你猜的数字小了,再来一次吧");
}
myint=myscanner.nextInt();
testnum++;
}
//成功就跳出,并且给出
System.out.print("完美成功了哈哈,你一共试了"+testnum+"次");
}
}
import java.util.Scanner;
public class MyTest {
/**
* 猜100以内数字的小游戏,最后给出猜的次数,
* @param args
*/
public static void main(String[] args){
//生成一个100的随机数字
int myrandom=(int)(100*Math.random());
//生成一个Scanner对象
Scanner myscanner=new Scanner(System.in);
System.out.print("开始输入你的数字");
//开始接受输入一个数字
int myint=myscanner.nextInt();
//这个用来记录猜的次数
byte testnum=0;
//开始一个循环,如果猜的数字和生成的随机数不同,就提示大小;
while(myint!=myrandom){
if(myint>myrandom){
System.out.println("你猜的数字大了,再来一次吧");
}else{
System.out.println("你猜的数字小了,再来一次吧");
}
myint=myscanner.nextInt();
testnum++;
}
//成功就跳出,并且给出
System.out.print("完美成功了哈哈,你一共试了"+testnum+"次");
}
}
运行状态
[line]2[/line]
game no 2:(11.30)
刚刚学了类和对象,趁着还没忘,先写个非常传统的RPG游戏,复刻勇者斗恶龙
新建一个Creative类
package com.linuxgame.test;
/**
* 创造物父类,定义一些基本的属性方法
* @author Administrator
*
*/
public class Creative {
//创造物的名字
protected String name;
//定义HP
protected int hp;
//定义攻击力strenth
protected int str;
//定义幸运值luck
protected int luk;
//构造函数
public Creative(String name,int hp,int str,int luk){
this.name=name;
this.hp=hp;
this.str=str;
this.luk=luk;
System.out.println(this.name+"出现在地图上");
}
//作为一只合格的怪物,最要紧的是要会攻击!不会攻击的怪物不是好怪物!
//作为一只风骚的英雄,最要紧的是要会攻击!不会开车的裁缝不是好厨子!
public void attack(Creative obj){
//产生一个攻击伤害,由力量和幸运共同产生;
int attacknum=this.str+(int)(this.luk*Math.random());
obj.attacked(attacknum);
}
//这个函数表示被抽时候扣掉HP
public void attacked(int attacknum){
this.hp-=attacknum;
}
//这个是传说中的血条
public int getHp(){
return this.hp;
}
//总的说些什么吧
public void say(String hehe){
System.out.print(hehe);
}
}
package com.linuxgame.test;
/**
* 创造物父类,定义一些基本的属性方法
* @author Administrator
*
*/
public class Creative {
//创造物的名字
protected String name;
//定义HP
protected int hp;
//定义攻击力strenth
protected int str;
//定义幸运值luck
protected int luk;
//构造函数
public Creative(String name,int hp,int str,int luk){
this.name=name;
this.hp=hp;
this.str=str;
this.luk=luk;
System.out.println(this.name+"出现在地图上");
}
//作为一只合格的怪物,最要紧的是要会攻击!不会攻击的怪物不是好怪物!
//作为一只风骚的英雄,最要紧的是要会攻击!不会开车的裁缝不是好厨子!
public void attack(Creative obj){
//产生一个攻击伤害,由力量和幸运共同产生;
int attacknum=this.str+(int)(this.luk*Math.random());
obj.attacked(attacknum);
}
//这个函数表示被抽时候扣掉HP
public void attacked(int attacknum){
this.hp-=attacknum;
}
//这个是传说中的血条
public int getHp(){
return this.hp;
}
//总的说些什么吧
public void say(String hehe){
System.out.print(hehe);
}
}
然后再定义一个英雄类啦
package com.linuxgame.test;
/**
* 这个类当然是定义了一个英雄类了哈哈哈哈哈
* @author Administrator
*
*/
public class Hero extends Creative{
//作为一个英雄,当然需要一个有主角光环
public Hero(String name,int hp,int str,int luk){
super(name,hp,str,luk);
System.out.println("**我是主角光环(made in china)***");
}
}
package com.linuxgame.test;
/**
* 这个类当然是定义了一个英雄类了哈哈哈哈哈
* @author Administrator
*
*/
public class Hero extends Creative{
//作为一个英雄,当然需要一个有主角光环
public Hero(String name,int hp,int str,int luk){
super(name,hp,str,luk);
System.out.println("**我是主角光环(made in china)***");
}
}
当然怪物类也是非常必要的。
package com.linuxgame.test;
/**这个类定义小怪物
*
* @author Administrator
*
*/
public class Monster extends Creative{
//小怪物出场总要有个背景音乐的吧,来个冷艳风格的
public Monster(String name,int hp,int str,int luk){
super(name,hp,str,luk);
System.out.println("*******我是冷艳的背景音乐*******");
}
}
package com.linuxgame.test;
/**这个类定义小怪物
*
* @author Administrator
*
*/
public class Monster extends Creative{
//小怪物出场总要有个背景音乐的吧,来个冷艳风格的
public Monster(String name,int hp,int str,int luk){
super(name,hp,str,luk);
System.out.println("*******我是冷艳的背景音乐*******");
}
}
最后,生成世界地图,开始大决战了。
package com.linuxgame.test;
/**
* 这里是世界地图,英雄和美女,恶龙和兔子,基佬和腐女的传说在这里流传
* @author Administrator
*
*/
public class Test {
public static void main(String[] args) {
//背景故事
System.out.println("很久很久以前,天朝是一个普大喜奔的美丽地方");
//生成怪物
Monster mon1=new Monster("灰太狼",1000,10,5);
//出场台词
mon1.say("愚蠢的人类啊!喵");
//英雄出场
Hero hero1=new Hero("毛小明",98,8,10);
//英雄要霸气的台词
hero1.say("做了英雄,妈妈再也不用担心我的学习");
System.out.println("剧情省略,玩家自己脑补,终于到了决定命运的时刻了");
System.out.println("******************************");
//战斗太激烈了,完全是不死不休啊
while((mon1.getHp()>0)&&(hero1.getHp()>0)){
//怪物打英雄
mon1.attack(hero1);
System.out.println("怪物君打了英雄君");
//英雄打怪物
if(hero1.getHp()>0){
hero1.attack(mon1);
System.out.println("英雄君打了怪物君");
}else{
hero1.say("我的生涯一片无悔,我想起那天夕阳下的奔跑,那是我逝去的青春");
break;
}
if(mon1.getHp()<=0){
mon1.say("我的生涯一片无悔,我想起那天夕阳下的奔跑,那是我逝去的青春");
}
}
}
}
package com.linuxgame.test;
/**
* 这里是世界地图,英雄和美女,恶龙和兔子,基佬和腐女的传说在这里流传
* @author Administrator
*
*/
public class Test {
public static void main(String[] args) {
//背景故事
System.out.println("很久很久以前,天朝是一个普大喜奔的美丽地方");
//生成怪物
Monster mon1=new Monster("灰太狼",1000,10,5);
//出场台词
mon1.say("愚蠢的人类啊!喵");
//英雄出场
Hero hero1=new Hero("毛小明",98,8,10);
//英雄要霸气的台词
hero1.say("做了英雄,妈妈再也不用担心我的学习");
System.out.println("剧情省略,玩家自己脑补,终于到了决定命运的时刻了");
System.out.println("******************************");
//战斗太激烈了,完全是不死不休啊
while((mon1.getHp()>0)&&(hero1.getHp()>0)){
//怪物打英雄
mon1.attack(hero1);
System.out.println("怪物君打了英雄君");
//英雄打怪物
if(hero1.getHp()>0){
hero1.attack(mon1);
System.out.println("英雄君打了怪物君");
}else{
hero1.say("我的生涯一片无悔,我想起那天夕阳下的奔跑,那是我逝去的青春");
break;
}
if(mon1.getHp()<=0){
mon1.say("我的生涯一片无悔,我想起那天夕阳下的奔跑,那是我逝去的青春");
}
}
}
}
运行情况。
作者: 熊喵酱 时间: 2013-11-30 09:52
本帖最后由 76213585 于 2013-11-29 19:22 编辑
我用Ruby寫寫看好了.... 應該不會很難owo
完成!
def guess_number(max)
a=rand(max);times=0
p "Guess the Number"
loop do
guess = gets.chomp
if guess.to_i == a
p "You won! The number was #{guess}! You have tryed #{times} times!"
break
elsif guess.to_i < a
p "The number is higher than your guess"
times += 1
elsif guess.to_i > a
p "The number is lower than your guess"
times += 1
end
end
end
guess_number(200)
def guess_number(max)
a=rand(max);times=0
p "Guess the Number"
loop do
guess = gets.chomp
if guess.to_i == a
p "You won! The number was #{guess}! You have tryed #{times} times!"
break
elsif guess.to_i < a
p "The number is higher than your guess"
times += 1
elsif guess.to_i > a
p "The number is lower than your guess"
times += 1
end
end
end
guess_number(200)
作者: satgo1546 时间: 2013-11-30 11:39
每次都看到Java =A=
表示我绝对不会学Java(所以不会玩Minecraft Forge= =
一天一个小游戏是太频繁了吧,1周一个差不多……
作者: myownroc 时间: 2013-11-30 11:41
以下是VB版- Sub Main()
- Randomize
- number = Int(Rnd() * 100)
- ans = - 1
- i = 0
- do
- i = 1
- ans = InputBox("Answer")
- If ans > number Then
- MsgBox "What you answer is larger."
- End If
- If ans < number Then
- MsgBox "What you answer is smaller."
- End If
- loop until ans = number
- MsgBox "Congratulations! You have tried" & i & "times"
- End Sub
复制代码
作者: RaidenInfinity 时间: 2013-11-30 11:55
VC++- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- int n,a,times;
- int main()
- {
- srand(time(NULL));
- n = rand()%99+1;
- printf("It's number guessing time! Please enter a number from 1 to 99: ");
- scanf("%d",&a);
- printf("\n");
- times++;
- while (a !=n){
- if (a < n){printf("The number is smaller than your guess.");}
- else if (a > n){printf("The number is bigger than your guess.");}
- printf(" Please try again: ");
- scanf("%d",&a);
- printf("\n");
- times++;
- }
- printf("Congratulations! The number was %d! You've tried %d times.",n,times);
- printf("\n\n");
- system("pause");
- return 0;
- }
复制代码
作者: maweiblue 时间: 2013-11-30 12:33
satgo1546 发表于 2013-11-30 11:39
每次都看到Java =A=
表示我绝对不会学Java(所以不会玩Minecraft Forge= =
一天一个小游戏是太频繁了吧,1 ...
不可能是一个完整的游戏,只是做个练习,完成一个功能
作者: 余烬之中 时间: 2013-11-30 12:42
本帖最后由 余烬之中 于 2013-11-30 12:43 编辑
我想用ruby写 发现有人写了 想用C++写 发现有人写了 想用VB写 发现有人写了
就把楼主的代码重写一遍吧 增加了输入-1时退出的功能- import java.util.Scanner;
- public class GuessNum {
- public static void main(String[] args) {
- Scanner myscanner = new Scanner(System.in);
- System.out.println("Guess what the number is:");
- int num = (int) (100 * Math.random()), i = 0, g;
- while ((g = myscanner.nextInt()) != num && g != -1) {
- i++;
- if (g > num) System.out.println("Too Big! Guess again:");
- else System.out.println("Too Small! Guess again:");
- }
- if (g == -1) System.out.println(" - Failed - \nYou tried " + i + " times.");
- else System.out.println(" - Succeed - \nYou tried " + i + " times.");
- }
- }
复制代码
作者: 夜沫痕 时间: 2013-11-30 12:46
膜拜- -好厉害啊……哦 话说能插入到VX什么的么= =
作者: maweiblue 时间: 2013-11-30 14:14
对game2 的一些小小修改。
很久很久以前,天朝是一个普大喜奔的美丽地方
灰太狼出现在地图上
*******我是冷艳的背景音乐*******
灰太狼说:愚蠢的人类啊!喵
毛小明出现在地图上
**我是主角光环(made in china)***
毛小明说:做了英雄,妈妈再也不用担心我的学习
剧情省略,玩家自己脑补,终于到了决定命运的时刻了
******************************
怪物君打了英雄君,造成12伤害
英雄君打了怪物君造成14伤害
怪物君打了英雄君,造成11伤害
英雄君打了怪物君造成15伤害
怪物君打了英雄君,造成13伤害
英雄君打了怪物君造成8伤害
怪物君打了英雄君,造成14伤害
英雄君打了怪物君造成10伤害
怪物君打了英雄君,造成10伤害
英雄君打了怪物君造成14伤害
怪物君打了英雄君,造成10伤害
英雄君打了怪物君造成8伤害
怪物君打了英雄君,造成13伤害
英雄君打了怪物君造成8伤害
怪物君打了英雄君,造成10伤害
英雄君打了怪物君造成16伤害
怪物挂了
灰太狼说:我的生涯一片无悔,我想起那天夕阳下的奔跑,那是我逝去的青春
作者: satgo1546 时间: 2013-11-30 17:55
maweiblue 发表于 2013-11-30 12:33
不可能是一个完整的游戏,只是做个练习,完成一个功能
像这样的游戏当然容易编写啦。如果你执着于控制台的程序,建议参考一下CraftOS的adventure。(Minecraft Computer Mod OS里的文字冒险游戏
作者: 鑫の尘埃 时间: 2013-11-30 18:13
脚本盲表示看不懂...
作者: 残瑰月狐 时间: 2013-11-30 18:33
只是个美工渣渣默望脚本帝卖萌
作者: 美丽晨露 时间: 2013-11-30 18:38
各种渣表示看不懂
做好的话,别忘记移植到RM内哟
作者: 凝望·流年 时间: 2013-11-30 20:59
之前一直以为JAVA写个游戏不容易,但仔细想想功能比RUBY好
作者: tjjlb 时间: 2013-11-30 21:17
最后一句 我的生涯一片无悔 亮了
作者: 钢炼君2 时间: 2013-11-30 21:23
LZ实在太给力了太感动了,请你研究,变得牛逼之后,做我的脚本猿吧,汗多阿里嘎多{:2_270:}
作者: 野生君IR 时间: 2013-12-1 17:49
本帖最后由 野生君IR 于 2013-12-1 19:06 编辑
唔,在下再參考看看才問問題
作者: maweiblue 时间: 2013-12-2 13:05
satgo1546 发表于 2013-11-30 17:55
像这样的游戏当然容易编写啦。如果你执着于控制台的程序,建议参考一下CraftOS的adventure。(Minecraft C ...
以后会过度到GUI界面,刚开始学,只能搞文字类型的,望见谅啊。
作者: maweiblue 时间: 2013-12-2 13:10
凝望·流年 发表于 2013-11-30 20:59
之前一直以为JAVA写个游戏不容易,但仔细想想功能比RUBY好
java的确不容易啊,很少PC游戏是用JAVA写的,当作学习算了,写写小游戏应该可以吧。
作者: maweiblue 时间: 2013-12-2 13:12
钢炼君2 发表于 2013-11-30 21:23
LZ实在太给力了太感动了,请你研究,变得牛逼之后,做我的脚本猿吧,汗多阿里嘎多 ...
好吧,约定了哦。
作者: dukesward 时间: 2013-12-2 13:40
maweiblue 发表于 2013-12-2 13:10
java的确不容易啊,很少PC游戏是用JAVA写的,当作学习算了,写写小游戏应该可以吧。 ...
这个跟语言没太大关系,java只是安全性较高而已,主要还是跟开发环境(引擎)和游戏类型有关,比如flash里用的就是javascript插件。
作者: maweiblue 时间: 2013-12-2 13:42
昨天学了Interface,做个道具类的控制吧,非常简单。
1.接口ITEM
package com.linuxgame.test;
/**
* 这个接口定义了物品的一些基本方法,只是一些声明
* @author Administrator
*
*/
public interface Item {
public String getName();
public void setName(String name);
void drop();
void getItem();
}
package com.linuxgame.test;
/**
* 这个接口定义了物品的一些基本方法,只是一些声明
* @author Administrator
*
*/
public interface Item {
public String getName();
public void setName(String name);
void drop();
void getItem();
}
2用一个武器来去实现ITEM
package com.linuxgame.test;
/**
* 这个类实现了ITEM接口,功能很少,多了我也不会做,先从简单的开始吧。
* @author Administrator
*
*/
public class Weapon implements Item{
private int id;
private String itemName;
public void setName(String name){
this.itemName=name;
}
public String getName(){
return this.itemName;
}
public void drop(){
System.out.println("武器"+this.itemName+"被丢掉了");
}
public Weapon(String name){
this.itemName=name;
System.out.println("系统生成武器"+this.itemName);
}
public void getItem(){
System.out.println("英雄得到武器"+this.itemName);
}
}
package com.linuxgame.test;
/**
* 这个类实现了ITEM接口,功能很少,多了我也不会做,先从简单的开始吧。
* @author Administrator
*
*/
public class Weapon implements Item{
private int id;
private String itemName;
public void setName(String name){
this.itemName=name;
}
public String getName(){
return this.itemName;
}
public void drop(){
System.out.println("武器"+this.itemName+"被丢掉了");
}
public Weapon(String name){
this.itemName=name;
System.out.println("系统生成武器"+this.itemName);
}
public void getItem(){
System.out.println("英雄得到武器"+this.itemName);
}
}
3,开始测试。
package com.linuxgame.test;
public class Game03 {
public static void main(String[] args){
//用一个数组来表示生成的ITEM吧,一个游戏中道具可能有几百几千,用数组可能不合适
Item[] myitem=new Item[3];
myitem[0]=new Weapon("屠龙刀");
myitem[1]=new Weapon("杀猪刀");
myitem[2]=null;
System.out.println("********************");
//打怪得到物品
myitem[0].getItem();
myitem[1].getItem();
System.out.println("************");
myitem[0].drop();
}
}
package com.linuxgame.test;
public class Game03 {
public static void main(String[] args){
//用一个数组来表示生成的ITEM吧,一个游戏中道具可能有几百几千,用数组可能不合适
Item[] myitem=new Item[3];
myitem[0]=new Weapon("屠龙刀");
myitem[1]=new Weapon("杀猪刀");
myitem[2]=null;
System.out.println("********************");
//打怪得到物品
myitem[0].getItem();
myitem[1].getItem();
System.out.println("************");
myitem[0].drop();
}
}
运行效果
系统生成武器屠龙刀
系统生成武器杀猪刀
********************
英雄得到武器屠龙刀
英雄得到武器杀猪刀
************
武器屠龙刀被丢掉了
作者: maweiblue 时间: 2013-12-2 13:47
论坛好卡。连发了,抱歉。。
作者: 艾拉梅德 时间: 2013-12-3 02:12
本帖最后由 艾拉梅德 于 2013-12-2 19:15 编辑
前几天才做完的c++黑白棋游戏,老师要求写3种文件……嗯,显示语言是法语
第一个hpp- #include "header.h"
- #include <iostream>
- #include <string>
- using namespace std;
- void Plateau::affiche() const
- {
- int i, j;
- cout <<endl;
- cout << " 0 1 2 3 4 5 6 7 "<<endl;
- cout << " ================ "<<endl;
- for (i=0;i<MAX;i++){
- for (j=0; j<MAX;j++){
- if (j==0)
- cout <<i <<" " <<p_plateau[i][j];
- else if (j==MAX-1)
- cout << " " <<p_plateau[i][j]<< " "<< i;
- else
- cout << " "<<p_plateau[i][j];}
- cout << endl;}
- cout << " ================ "<<endl;
- cout << " 0 1 2 3 4 5 6 7"<<endl;
- cout <<endl;
- }
- int Plateau::reste()
- {
- int n=0;
- for (int i=0;i<MAX;i++)
- {
- for (int j=0;j<MAX;j++)
- {
- if (p_plateau[i][j]==V)
- n++;
- }
- }
- return n;
- }
- void Plateau::pion_trans(const int ligne, const int colone, const int tour)
- {
- if (tour==0)
- p_plateau[ligne][colone]=B;
- else
- p_plateau[ligne][colone]=N;
- }
- int Plateau::calcul_score(const char nom)
- {
- int n=0;
- for (int i=0; i<MAX; i++)
- {
- for (int j=0; j < MAX; j++)
- {
- if (p_plateau[i][j]==nom)
- n++;
- }
- }
- return n;
- }
- void Joueur::saisirnom(const int i)
- {
- string nom;
- cout << "Quel est le nom de joueur"<< i << "?"<<endl;
- cin >> nom;
- j_nom=trans_nom(nom);
- }
- string Joueur::trans_nom(string nom)
- {
- for (int i=1;i<nom.length();i++)
- nom[i]=tolower(nom[i]);
- nom[0]=toupper(nom[0]);
- return nom;
- }
- int Joueur::change_score(const int n)
- {
- j_score=n;
- return j_score;
- }
- void Jeu::commence()
- {
- j1.saisirnom(1);
- j2.saisirnom(2);
- joueurCourant=0;
- cout << "Donc le blanc commence. C'est le tour de "<< j1.getnom() <<endl;
- cout << B<< ":pour le pion blanc"<< " "<< N<< ":pour le pion noir"<<endl;
- p.affiche();
- run();
- }
- void Jeu::saisir(const int tour)
- {
- int ligne, colone, n;
- cout << "Quel ligne vous voulez placer votre pion? ligne(0-7)"<<endl;
- cin>> ligne;
- while (ligne < 0 || ligne > 7)
- {
- cout << "Erreur, resaisir"<<endl;
- cin>> ligne;
- }
- cout << "Quel colone vous voulez placer votre pion? colone(0-7)"<<endl;
- cin>> colone;
- while (colone < 0 || colone > 7)
- {
- cout << "Erreur, resaisir"<<endl;
- cin>> colone;
- }
- if (!p.determiner_vide(ligne,colone))//si ce n'est pas vide
- {
- cout << "Ici il y a deja un pion"<<endl;
- saisir(tour);
- }
- else{
- n= p.determiner(ligne, colone, tour);
- if (n==0)
- {
- cout << "Ce n'est pas une place valide"<<endl;
- p.affiche();
- saisir(tour);
- }
- else
- {
- cout << "C'est une place valide"<<endl;
- score();
- p.affiche();
- }
- }
- }
- void Jeu::run()
- {
- while (p.reste() != 0)
- {
- if (p.skip(joueurCourant))//s'il n'y plus de place, saute
- {
- cout << "Car il n'y pas de place, donc maintenant c'est le tour de joueur "<< joueurCourant+2<<endl;
- joueurCourant=(joueurCourant+1)%2;
- }
- if (joueurCourant==0)
- cout << j1.getnom()<<", placez votre pion."<<endl;
- else
- cout << j2.getnom()<<", placez votre pion."<<endl;
- saisir(joueurCourant);
- joueurCourant=(joueurCourant+1)%2;
- }
- fin();
- }
- bool Plateau::skip(const int tour)
- {
- int cpt=0, i, j;
- char type;
- if (tour==0)
- type=B;
- else
- type=N;
- for (i=0;i<MAX;i++)
- {
- for(j=0;j<MAX;j++)
- {
- if (p_plateau[i][j]==V)
- {
- cpt+=determiner(i, j, tour, false);
- }
- }
- }
- return (cpt==0);
- }
- bool Plateau::determiner_vide(const int ligne, const int colone)
- {
- return (p_plateau[ligne][colone]==V);
- }
- int Plateau::determiner(const int i, const int j, const int tour, bool skip)
- {
- int ligne=i,colone=j , n=0, cpt;
- char type;
- if (tour==0)
- type=B;
- else
- type=N;
- //haut
- if (i != 0){
- while (ligne >= 0 && (p_plateau[ligne-1][colone]!=type && p_plateau[ligne-1][colone]!=V))
- {
- ligne--;}
- if (p_plateau[ligne-1][colone]==type)
- {
- n+=(i-ligne);
- if (skip != false){
- for (cpt=i-1;cpt>ligne-1;cpt--)
- {
- pion_trans(cpt, colone, tour);
- }}
- }
- }
- ligne=i,colone=j;
- //haut droit
- if (i != 0 && j != MAX-1){
- while ((ligne >= 0 && colone < MAX) && (p_plateau[ligne-1][colone+1]!=type && p_plateau[ligne-1][colone+1]!=V))
- {
- ligne--;
- colone++;
- }
- if (p_plateau[ligne-1][colone+1]==type)
- {
- n+=(i-ligne);
- if (skip != false){
- ligne=i,colone=j;
- while ((ligne >= 0 && colone < MAX) && (p_plateau[ligne-1][colone+1]!=type && p_plateau[ligne-1][colone+1]!=V))
- {
- ligne--;
- colone++;
- pion_trans(ligne, colone, tour);
- }}
- }}
- ligne=i,colone=j;
- //droit
- if (j != MAX-1){
- while (colone < MAX && (p_plateau[ligne][colone+1]!=type && p_plateau[ligne][colone+1]!=V))
- {
- colone++;}
- if (p_plateau[ligne][colone+1]==type)
- {
- n+=(colone-j);
- if (skip != false){
- for (cpt=j+1;cpt<colone+1;cpt++)
- {
- pion_trans(ligne, cpt, tour);
- }}
- }
- }
- ligne=i,colone=j;
- //bas droit
- if (i != MAX-1 && j != MAX-1){
- while ((ligne < MAX && colone < MAX) && (p_plateau[ligne+1][colone+1]!=type && p_plateau[ligne+1][colone+1]!=V))
- {
- ligne++;
- colone++;
- }
- if (p_plateau[ligne+1][colone+1]==type)
- {
- n+=(ligne-i);
- if (skip != false){
- ligne=i,colone=j;
- while ((ligne < MAX && colone < MAX) && (p_plateau[ligne+1][colone+1]!=type && p_plateau[ligne+1][colone+1]!=V))
- {
- ligne++;
- colone++;
- pion_trans(ligne,colone,tour);
- }}
- }}
- //bas
- ligne=i,colone=j;
- if (i != MAX-1){
- while (ligne < MAX && (p_plateau[ligne+1][colone]!=type && p_plateau[ligne+1][colone]!=V))
- {
- ligne++;}
- if (p_plateau[ligne+1][colone]==type)
- {
- n+=(ligne-i);
- if (skip != false){
- for (cpt=i+1;cpt<ligne+1;cpt++)
- {
- pion_trans(cpt, colone, tour);
- }
- }}
- }
- //bas gauche
- ligne=i,colone=j;
- if (i != MAX-1 && j != 0){
- while ((ligne < MAX && colone >=0) && (p_plateau[ligne+1][colone-1]!=type && p_plateau[ligne+1][colone-1]!=V))
- {
- ligne++;
- colone--;
- }
- if (p_plateau[ligne+1][colone-1]==type)
- {
- n+=(ligne-i);
- if (skip != false){
- ligne=i,colone=j;
- while ((ligne < MAX && colone >=0) && (p_plateau[ligne+1][colone-1]!=type && p_plateau[ligne+1][colone-1]!=V))
- {
- ligne++;
- colone--;
- pion_trans(ligne,colone,tour);
- }}
- }}
- //gauche
- ligne=i,colone=j;
- if (i != 0){
- while (ligne > 0 && (p_plateau[ligne][colone-1]!=type && p_plateau[ligne][colone-1]!=V))
- {
- colone--;}
- if (p_plateau[ligne][colone-1]==type)
- {
- n+=(j-colone);
- if (skip != false){
- for (cpt=j-1;cpt>colone-1;cpt--)
- {
- pion_trans(ligne, cpt, tour);
- }
- }}
- }
- //haut gauche
- ligne=i,colone=j;
- if (i != 0 && j != 0){
- while ((ligne >=0 && colone >=0) && (p_plateau[ligne-1][colone-1]!=type && p_plateau[ligne-1][colone-1]!=V))
- {
- ligne--;
- colone--;
- }
- if (p_plateau[ligne-1][colone-1]==type)
- {
- n+=(i-ligne);
- ligne=i,colone=j;
- if (skip != false){
- while ((ligne >=0 && colone >=0) && (p_plateau[ligne-1][colone-1]!=type && p_plateau[ligne-1][colone-1]!=V))
- {
- ligne--;
- colone--;
- pion_trans(ligne,colone,tour);
- }}
- }}
- if (n > 0 && skip!=false)
- p_plateau[i][j]=type;
- return n;
- }
- void Jeu::score()
- {
- int b=p.calcul_score(B);
- int n=p.calcul_score(N);
- cout << "Le score de joueur 1 "<< j1.getnom()<<" est :" << j1.change_score(b) << endl;
- cout << "Le score de joueur 2 "<< j2.getnom()<<" est :" << j2.change_score(n) << endl;
- }
- void Jeu::fin()
- {
- if (j1.getscore() > j2.getscore())
- cout << "C'est le joueur " << j1.getnom() << " qui a gagne!"<<endl;
- else if (j2.getscore() > j1.getscore())
- cout << "C'est le joueur " << j2.getnom() << " qui a gagne!"<<endl;
- else
- cout << ""<<endl;
- }
复制代码 然后主程序- #include <iostream>
- #include "header.h"
- using namespace std;
- int main()
- {
- char recommence = 'n';
- cout << "Bienvenue! C'est un jeu d'Othello!" << endl;
- Jeu j;
- do{
- j.commence();
- cout << "Est-ce que vous-voulez recommencer?(o/n)"<<endl;
- cin>>recommence;
- }while (recommence=='o');
- return 0;
- }
复制代码 然后最后的.h- #ifndef HEADER_H_INCLUDED
- #define HEADER_H_INCLUDED
- #include <string>
- #include <iostream>
- using namespace std;
- const char B='o';
- const char N='*';
- const char V='-'; // pour repr¨¦senter une case vide
- const int MAX=8;
- class Plateau
- {
- public:
- Plateau(){}
- void affiche() const;
- int reste();
- bool skip(const int);
- bool determiner_vide(const int, const int);
- void pion_trans(const int, const int, const int);
- int calcul_score(const char);
- int determiner(const int, const int, const int, bool=true);
- private:
- char p_plateau[MAX][MAX]={
- {V,V,V,V,V,V,V,V},
- {V,V,V,V,V,V,V,V},
- {V,V,V,V,V,V,V,V},
- {V,V,V,B,N,V,V,V},
- {V,V,V,N,B,V,V,V},
- {V,V,V,V,V,V,V,V},
- {V,V,V,V,V,V,V,V},
- {V,V,V,V,V,V,V,V}};
- };
- class Joueur
- {
- public:
- Joueur(int const coul=1, string const nom="Joueur", int const score=0):j_coul(coul), j_nom(nom), j_score(score){}
- void saisirnom(const int);
- string trans_nom(string nom);
- string getnom(){return j_nom;}
- int change_score(const int);
- int getscore(){return j_score;}
- private:
- string j_nom ; // le nom du joueur
- int j_coul ; // caract¨¨re repr¨¦sentant le joueur : 1 ou 2
- int j_score ; // le score du joueur pour la partie en cours
- };
- class Jeu
- {
- public:
- void commence();
- void saisir(const int);
- void run();
- void score();
- void fin();
- private:
- Plateau p; // le plateau de jeu
- Joueur j1, j2; // les 2 joueurs
- int joueurCourant ; //0 si joueur 1, 1 sinon
- };
- #endif // HEADER_H_INCLUDED
复制代码 大概就这样,这是两个玩家版本,之后还要写电脑AI版本的……
作者: maweiblue 时间: 2013-12-3 10:37
鉴于前面的代码都是文字太过枯燥,打算学些GUI的东西,创建一个窗口,算是GUI的第一课吧。
package net.peise.swing;
import javax.swing.*;
public class MyPanel {
public static void main(String[] args){
//生成一个Frame;
MyFrame myframe1=new MyFrame("我的世界");
javax.swing.JLabel myLable=new javax.swing.JLabel();
myLable.setBounds(10, 20, 100, 60);
javax.swing.JButton myButton=new javax.swing.JButton();
myButton.setBounds(123, 20, 100, 60);
myButton.setText("确定发送");
myLable.setText("标题(Lable)");
javax.swing.JTextField myText=new javax.swing.JTextField();
myText.setBounds(20,20,100,60);
myText.setText("这里是聊天窗口");
myframe1.add(myButton);
myframe1.add(myLable);
myframe1.add(myText);
myframe1.setVisible(true);
}
}
/**
* 这个类创建一个窗口
* @author Administrator
*
*/
class MyFrame extends JFrame{
/**
*
*/
private static final long serialVersionUID = 1L;
public MyFrame(String name){
super();
this.setSize(800, 600);
this.setTitle(name);
}
}
package net.peise.swing;
import javax.swing.*;
public class MyPanel {
public static void main(String[] args){
//生成一个Frame;
MyFrame myframe1=new MyFrame("我的世界");
javax.swing.JLabel myLable=new javax.swing.JLabel();
myLable.setBounds(10, 20, 100, 60);
javax.swing.JButton myButton=new javax.swing.JButton();
myButton.setBounds(123, 20, 100, 60);
myButton.setText("确定发送");
myLable.setText("标题(Lable)");
javax.swing.JTextField myText=new javax.swing.JTextField();
myText.setBounds(20,20,100,60);
myText.setText("这里是聊天窗口");
myframe1.add(myButton);
myframe1.add(myLable);
myframe1.add(myText);
myframe1.setVisible(true);
}
}
/**
* 这个类创建一个窗口
* @author Administrator
*
*/
class MyFrame extends JFrame{
/**
*
*/
private static final long serialVersionUID = 1L;
public MyFrame(String name){
super();
this.setSize(800, 600);
this.setTitle(name);
}
}
效果。。
作者: awedcvgyujm 时间: 2013-12-3 12:37
本帖最后由 awedcvgyujm 于 2013-12-3 12:43 编辑
以前用java写过一个游戏
结果控场技能不够没法驾驭这么大的软件最后坑掉了_(:з」∠)_
但还是不得不说java真的很方便
作者: 李光兆 时间: 2013-12-3 12:42
脚本触触们等做到了一定程度记得打包发给我们这些广大渣渣群众w
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |