急急急!高分请求Java编程 做一个发牌的程序

急急急!高分请求Java编程 做一个发牌的程序,第1张

哈哈哈,又是一个不想写作业的,先占个位置,我去看看先

密歇根科大,这个学校的cs怎么样啊,在芝加哥吗

import javautilArrayList;

import javautilCollections;

import javautilIterator;

import javautilList;

public class CardShuffler {

class CardArray{

List<Card> cards;

Iterator itCard;

public CardArray() {

super();

}

public CardArray(List<Card> cards) {

super();

thiscards = CollectionssynchronizedList(new ArrayList<Card>());

thiscardsaddAll(cards);

itCard = thiscardsiterator();

}

public CardArray initialCards(int numberOfDeck){

int xNumberOfDeck = numberOfDeck%6+1;

cards = new ArrayList<Card>();

for(int i=0;i<xNumberOfDeck;i++){

cardsaddAll(createOneDeck());

}

itCard = cardsiterator();

return this;

}

public ArrayList<Card> createOneDeck(){

ArrayList<Card> result= new ArrayList<Card>();

for(int j=2;j<15;j++){ resultadd(new Card('S',j)); }

for(int j=2;j<15;j++){ resultadd(new Card('H',j)); }

for(int j=2;j<15;j++){ resultadd(new Card('D',j)); }

for(int j=2;j<15;j++){ resultadd(new Card('C',j)); }

return result;

}

public CardArray CardcargetFirstHalf(){

return new CardArray(cardssubList(0, cardssize()/2));

}

public CardArray CardcargetSecondHalf(){

return new CardArray(cardssubList(cardssize()/2+1, cardssize()));

}

public synchronized List<Card> getThefollowingXCards(int numberOfCard){

List<Card> result = CollectionssynchronizedList(new ArrayList<Card>());

while(getItCard()hasNext()&&numberOfCard>0){

Card x = (Card)getItCard()next();

resultadd(x);

numberOfCard--;

}

return result;

}

public String toString(){

StringBuffer sb = new StringBuffer();

for(int i = 0 ; i < getCards()size() ; i++){

sbappend(getCards()get(i));

}

return sbtoString();

}

public boolean isEmpty(){

return getCards()isEmpty();

}

public void addCards(List<Card> cards){

getCards()addAll(cards);

}

public void addCards(CardArray cardArray){

getCards()addAll(cardArraygetCards());

}

//getters and setters

public Iterator getItCard() {

return itCard;

}

public void setItCard(Iterator itCard) {

thisitCard = itCard;

}

public List<Card> getCards() {

return cards;

}

public void setCards(List<Card> cards) {

thiscards = cards;

}

}

class Card{

char type='S';//Spade,Dimond,Heart,C

int rank=2;//A=14,K=13,Q=12,2=2

public int getRank() {

return rank;

}

public void setRank(int rank) {

thisrank = rank;

}

public char getType() {

return type;

}

public void setType(char type) {

thistype = type;

}

public Card(char type, int rank) {

super();

thistype = type;

thisrank = rank;

}

public String toString(){

return StringvalueOf(getType())+StringvalueOf(getRank());

}

}

public static int calculateNextX(int lastX){

return (5lastX)%16 + 1;

}

public void testCreateAllCards(int numberOfDeck){

CardArray tmp = new CardArray();

tmpinitialCards(numberOfDeck);

Systemoutprintln(tmp);

}

public void halfCards(){

int numberOfDeck = 1;

CardArray tmp = new CardArray();

tmpinitialCards(numberOfDeck);

Systemoutprintln("the first half:\n"+tmpCardcargetFirstHalf());

Systemoutprintln("the second half:\n"+tmpCardcargetSecondHalf());

}

public static CardArray shuffle(CardArray cardArray,int seed){

CardArray first = cardArrayCardcargetFirstHalf();

CardArray second = cardArrayCardcargetSecondHalf();

CardArray total = null;

int numberOfCard = calculateNextX(seed);

if(first!=null&&!firstisEmpty()&&second!=null&&!secondisEmpty()){

total = new CardShuffler()new CardArray(firstgetThefollowingXCards(numberOfCard));

totaladdCards(secondgetThefollowingXCards(numberOfCard));

}

while(firstgetItCard()hasNext()&&secondgetItCard()hasNext()){

numberOfCard = calculateNextX(numberOfCard);

totaladdCards(firstgetThefollowingXCards(numberOfCard));

totaladdCards(secondgetThefollowingXCards(numberOfCard));

}

/while(firstgetItCard()hasNext()){

numberOfCard = calculateNextX(numberOfCard);

totaladdCards(firstgetThefollowingXCards(numberOfCard));

}

while(secondgetItCard()hasNext()){

numberOfCard = calculateNextX(numberOfCard);

totaladdCards(firstgetThefollowingXCards(numberOfCard));

}//it is not quite possible to occur the situation that one deck is more or less than the other one/

Systemoutprintln("shuffled cards:\n"+totaltoString());

return total;

}

public static void main(String arg[]){

Systemoutprintln(shuffle(new CardShuffler()new CardArray()initialCards(1), 23));

}

}

代码:

package program3;

/

  纸牌

  @author lina

 /

public class Card {

/

  boolean型,false为梅花,true为红桃

 /

private final boolean type;

/

  int型,牌值

 /

private final int number;

/

  构造函数

  @param type boolean型,false为梅花,true为红桃

  @param number int型,牌值

 /

public Card(boolean type, int number) {

thistype = type;

thisnumber = number;

}

public String toString() {

String t = "";

String v = "";

if(!thistype) {

t = "梅花";

} else {

t = "红桃";

}

if(thisnumber == 1) {

v = "A";

} else if(thisnumber == 11) {

v = "J";

} else if(thisnumber == 12) {

v = "Q";

} else if(thisnumber == 13) {

v = "K";

} else {

v = thisnumber + "";

}

String back = t + v;

return back;

}

public boolean isType() {

return type;

}

public int getNumber() {

return number;

}

}package program3;

/

  主程序

  @author lina

 /

public class Main {

/

  构造初始卡组:

  0~12为左手的梅花2~A

  13~25为右手的红桃2~A

 /

private static Card[] create_cards() {

Card[] back = new Card[26];

for(int i = 0; i < backlength; i++) {

// 为梅花

if(i / 13 == 0) {

if (i == 12) {

back[i] = new Card(false, 1);

} else {

back[i] = new Card(false, i + 2);

}

}

// 为红桃

if(i / 13 == 1) {

if(i == 25) {

back[i] = new Card(true, 1);

} else {

back[i] = new Card(true, i % 13 + 2);

}

}

}

return back;

}

/

  分作输出卡组

  @param cards

 /

private static void show(Card[] cards) {

Systemoutprint("左手牌组:");

for(int i = 0; i <= 11; i++) {

Systemoutprint(cards[i] + ",");

}

Systemoutprint(cards[12]);

Systemoutprintln();

Systemoutprint("右手牌组:");

for(int i = 13; i <= 24; i++) {

Systemoutprint(cards[i] + ",");

}

Systemoutprint(cards[25]);

Systemoutprintln();

}

/

  进行一次洗牌

  @param cards Card[]型,待洗牌组

  @return Card[]型,洗牌后的牌组

 /

private static Card[] shuffle(Card[] cards) {

Card[] back = new Card[cardslength];

for(int i = 0; i < cardslength / 2; i++) {

back[2  i] = cards[i + 13];

back[2  i + 1] = cards[i];

}

return back;

}

public static void main(String[] args) {

Card[] cards = create_cards();

Systemoutprintln("初始时:");

show(cards);

// int count = 0; // 洗牌次数

// do {

// count++;

// cards = shuffle(cards);

// } while(cards[0]isType() || (!cards[0]isType() && cards[0]getNumber() != 2));

// Systemoutprintln("第" + count + "次洗牌后:");

// show(cards);

       int count = 1;   // 循环洗牌次数

       int realCount = count % 18; // 每洗18次牌牌组将恢复初始

        for(int i = 0; i < realCount; i++) {

            cards = shuffle(cards);

        }

        Systemoutprintln("第" + count + "轮洗牌后:");

        show(cards);

}

}

注意:每洗18次牌牌组是会复原的,因此无论洗多少次牌,我们在计算时总可以控制在洗18次之内!!!又因为牌组的大小固定为26张,则本算法的时间复杂度将为常数阶O(1),否则时间复杂度将与洗牌次数有关变为恐怖的O(n)。

我使用了一个辅助数组,因为牌组长度固定为26,因此也无所谓了,空间复杂度也是O(1)

以下是洗7次牌时的测试数据:

初始时:

左手牌组:梅花2,梅花3,梅花4,梅花5,梅花6,梅花7,梅花8,梅花9,梅花10,梅花J,梅花Q,梅花K,梅花A

右手牌组:红桃2,红桃3,红桃4,红桃5,红桃6,红桃7,红桃8,红桃9,红桃10,红桃J,红桃Q,红桃K,红桃A

第7轮洗牌后:

左手牌组:红桃J,红桃7,红桃3,梅花Q,梅花8,梅花4,红桃A,红桃10,红桃6,红桃2,梅花J,梅花7,梅花3

右手牌组:红桃K,红桃9,红桃5,梅花A,梅花10,梅花6,梅花2,红桃Q,红桃8,红桃4,梅花K,梅花9,梅花5

然后是洗18次牌时(变回初始了):

初始时:

左手牌组:梅花2,梅花3,梅花4,梅花5,梅花6,梅花7,梅花8,梅花9,梅花10,梅花J,梅花Q,梅花K,梅花A

右手牌组:红桃2,红桃3,红桃4,红桃5,红桃6,红桃7,红桃8,红桃9,红桃10,红桃J,红桃Q,红桃K,红桃A

第18轮洗牌后:

左手牌组:梅花2,梅花3,梅花4,梅花5,梅花6,梅花7,梅花8,梅花9,梅花10,梅花J,梅花Q,梅花K,梅花A

右手牌组:红桃2,红桃3,红桃4,红桃5,红桃6,红桃7,红桃8,红桃9,红桃10,红桃J,红桃Q,红桃K,红桃A

public class Card{ String color; String value; public Card(String color,String value){ thiscolor = color; thisvalue = value; } //定义一个构造函数用于初始化大王和小王 public Card(String value){ thiscolor=""; //如果不给color赋值的话,洗牌和切牌后的大小王前面会显示“null” thisvalue = value; } // 取一张牌的花色 public String getcolor() { return color; } // 取一张牌的值 public String getvalue() { return value; } } class Poker{ static Card[] cards=new Card[54]; static String[] colors={"红桃","黑桃","方块","梅花"}; static String values[]={"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; //构造方法Poker()用于初始化这副扑克 public Poker() { for (int i = 0; i < colorslength; i++) { for (int j = 0; j < valueslength; j++) { cards[i 13 + j] = new Card(colors[i], values[j]); } } cards[52] = new Card("小王"); cards[53] = new Card("大王"); } //方法getCard()用于获取一张牌的花色和点数 public Card[] getCard() { return Pokercards; } //方法Show()用于显示一副新的扑克 public void Show() { } } class Shuffle { static Poker poker = new Poker(); static Card[] cards = new Card[54]; //方法random用于返回一个不重复的数组 public static int[] random(int length) { int[] a = new int[length]; for (int i = 0; i < length; i++) { a[i] = (int) (Mathrandom() length);//产生一个0到length的随机数 for (int j = 0; j < i; j++) { if (a[j] == a[i]) {//比较是否相等,如果相等则重新产生 i--; break; } } } return a; } //方法xipai()用于将所得的随机数组的值赋值给牌的下标 public static void xipai() { int[] b = new int[54]; b = random(54);//调用random方法产生一个长度为54的不重复的随机数组 cards = pokergetCard(); Card temp = null; for(int i = 0; i < blength; i++){ //开始遍历数组实现重新排列 int k = b[i]; temp = cards[k]; cards[i] = cards[k]; cards[k] = temp;} //输出洗牌后的扑克 } } public class static void qiepai(int length) { int number = (int) (Mathrandom() length);//产生一个随机数 Systemoutprintln("随机数为:" + number);//显示随机数是多少 Card[] temp = new Card[length]; int start = number;//设置切牌后的起点位置 for (int i = 0; i < length - number; i++) { temp[i] = cards[start++];//将切点后面的牌暂时放入temp数组中 } for (int j = 0; j < number; j++) { temp[length - number + j] = cards[j];//将切点前面的牌加入temp数组中 } for (int k = 0; k < length; k++) { cards[k] = temp[k];} } public static void main(String[] args) { Poker newpoker = new Poker(); newpokerShow();//调用Show()方法显示一副新扑克 xipai();//调用xipai()方法显示洗牌过后的扑克 qiepai(54);//调用qiepai()方法显示切牌以后的扑克 } }

洗牌过程?一句话就完成洗牌过程了!!

代码如下:

import javaioIOException;

import javautilArrayList;

import javautilCollections;

import javautilList;

public class CardGame {

public static void main(String[] args) throws IOException {

String[] types={"黑桃","草花","红心","方块"};

String[] value={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};

String[] king={"JOKER","joker"};

List<String> cards=new ArrayList<String>();//将一副牌54张放入待洗牌的集合中

for(int i=0;i<typeslength;i++){

for(int j=0;j<valuelength;j++){

cardsadd(types[i]+value[j]);//每个花色的2-A

}

}

cardsadd(king[0]);//大鬼

cardsadd(king[1]);//小鬼

int m=0;

Systemoutprintln("洗牌之前----------------------------------------------------\n");

for(String str:cards)

{

Systemoutprint(str+"\t");

m++;

if(m%13==0)

Systemoutprintln();

}

Collectionsshuffle(cards);//洗牌动作

m=0;

Systemoutprintln("\n\n洗牌之后-----------------------------------------------------\n");

for(String str:cards)//输出洗牌后的结果

{

Systemoutprint(str+"\t");

m++;

if(m%13==0)

Systemoutprintln();

}

}

}

我在这里把所有的花色都加入一起洗牌了,楼主可根据需要进行特殊花色的洗牌!!你多执行几次就会发现每次洗牌后的牌的位置都不是一样的!!关键在一个洗牌动作的方法!!

import javautilEnumeration;

import javautilHashtable;/

7 乱序扑克牌 洗牌方法 8 9

@author virture 10 11

/

public class Cards { Hashtable htMember = new Hashtable();// 放置扑克牌的Hash表 public Cards() { } public void put(String card) {

htMemberput(card, card);

} public void get() {

Systemoutprintln("你拿到的牌是:");

Enumeration RLKey = htMemberkeys();

while (RLKeyhasMoreElements()) {

String accKey = RLKeynextElement()toString();// 取HashTable中的关键字词

Systemoutprint((String) htMemberget(accKey) + ",");

}

} public static void main(String[] args) {

String[] cards = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10",

"J", "Q", "K" };

String[] kinds = { "黑桃", "红桃", "梅花", "方块" }; Cards cardList = new Cards(); String suit;// 当前选中牌的类型

String face;// 当前选中牌

int randomCardNum = 52;// 当前随机取牌的个数,记住不能大于全部牌52张 while (true) {

suit = kinds[Mathround((float) Mathrandom() (kindslength - 1))];

face = cards[Mathround((float) Mathrandom() (cardslength - 1))]; cardListput(suit + face);

if (cardListhtMembersize() >= randomCardNum

&& cardListhtMembersize() <= 52) {

break;

}

}

cardListget();

}

}

你指的是Card里的toString方法吧

 public String toString() {

  String aa = suit + " " + num + "  ";

  return aa;

 }

toString这个方法一般在 Systemoutprint时使用,这个是打印出String,JVM就是默认调用类的toSting方法

注:所有类都有toString方法,默认是当前对象的hashcode,即内存地址

所以在发牌是打印

 public void dealcard()//发牌

    {

        for(int i=0;i<52;i++)

        {

            if(i%4==0&&i!=0){

             Systemoutprintln();  //每发4张牌输出换行

            }

            // 就是这里,默认调用card的toString方法

             Systemoutprint(card[i]); //依次输出 发的牌

        }

    }

编程

这是每个游戏编程FAQ里都有的问题。这个问题每星期都会在游戏开发论坛上被问上好几次。这是个很好的问题,但是,没人能给出简单的答案。在某些应用程序中,总有一些计算机语言优于其他语言。下面是几种用于编写游戏的主要编程语言的介绍及其优缺点。希望这篇文章能帮助你做出决定。

1、C语言

如果说FORTRAN和COBOL是第一代高级编译语言,那么C语言就是它们的孙子辈。C语言是Dennis Ritchie在七十年代创建的,它功能更强大且与ALGOL保持更连续的继承性,而ALGOL则是COBOL和FORTRAN的结构化继承者。C语言被设计成一个比它的前辈更精巧、更简单的版本,它适于编写系统级的程序,比如 *** 作系统。在此之前, *** 作系统是使用汇编语言编写的,而且不可移植。C语言是第一个使得系统级代码移植成为可能的编程语言。

C语言支持结构化编程,也就是说C的程序被编写成一些分离的函数呼叫(调用)的集合,这些呼叫是自上而下运行,而不像一个单独的集成块的代码使用GOTO语句控制流程。因此,C程序比起集成性的FORTRAN及COBOL的“空心粉式代码”代码要简单得多。事实上,C仍然具有GOTO语句,不过它的功能被限制了,仅当结构化方案非常复杂时才建议使用。

正由于它的系统编程根源,将C和汇编语言进行结合是相当容易的。函数调用接口非常简单,而且汇编语言指令还能内嵌到C代码中,所以,不需要连接独立的汇编模块。

优点:有益于编写小而快的程序。很容易与汇编语言结合。具有很高的标准化,因此其他平台上的各版本非常相似。

缺点:不容易支持面向对象技术。语法有时会非常难以理解,并造成滥用。

移植性:C语言的核心以及ANSI函数调用都具有移植性,但仅限于流程控制、内存管理和简单的文件处理。其他的东西都跟平台有关。比如说,为Windows和Mac开发可移植的程序,用户界面部分就需要用到与系统相关的函数调用。这一般意味着你必须写两次用户界面代码,不过还好有一些库可以减轻工作量。

用C语言编写的游戏:非常非常多。

资料:C语言的经典著作是《The C Programming Language》,它经过多次修改,已经扩展到最初的三倍大,但它仍然是介绍C的优秀书本。一本极好的教程是《The Waite Group's C Primer Plus》。

2、C++

C++语言是具有面向对象特性的C语言的继承者。面向对象编程,或称OOP是结构化编程的下一步。OO程序由对象组成,其中的对象是数据和函数离散集合。有许多可用的对象库存在,这使得编程简单得只需要将一些程序“建筑材料”堆在一起(至少理论上是这样)。比如说,有很多的GUI和数据库的库实现为对象的集合。

C++总是辩论的主题,尤其是在游戏开发论坛里。有几项C++的功能,比如虚拟函数,为函数呼叫的决策制定增加了一个额外层次,批评家很快指出C++程序将变得比相同功能的C程序来得大和慢。C++的拥护者则认为,用C写出与虚拟函数等价的代码同样会增加开支。这将是一个还在进行,而且不可能很快得出结论的争论。

我认为,C++的额外开支只是使用更好的语言的小付出。同样的争论发生在六十年代高级程序语言如COBOL和FORTRAN开始取代汇编成为语言所选的时候。批评家正确的指出使用高级语言编写的程序天生就比手写的汇编语言来得慢,而且必然如此。而高级语言支持者认为这么点小小的性能损失是值得的,因为COBOL和FORTRAN程序更容易编写和维护。

优点:组织大型程序时比C语言好得多。很好的支持面向对象机制。通用数据结构,如链表和可增长的阵列组成的库减轻了由于处理低层细节的负担。

缺点:非常大而复杂。与C语言一样存在语法滥用问题。比C慢。大多数编译器没有把整个语言正确的实现。

移植性:比C语言好多了,但依然不是很乐观。因为它具有与C语言相同的缺点,大多数可移植性用户界面库都使用C++对象实现。

使用C++编写的游戏:非常非常多。大多数的商业游戏是使用C或C++编写的。

资料:最新版的《The C++ Programming Language》非常好。作为教程,有两个阵营,一个假定你知道C,另外一个假定你不知道。到目前为止,最好的C++教程是《Who's Afraid of C++》,如果你已经熟知C,那么试一下《Teach Yourself C++》。

3、我该学习C++或是该从C开始

我不喜欢这种说法,但它是继“我该使用哪门语言”之后最经常被问及的问题。很不幸,不存在标准答案。你可以自学C并使用它来写程序,从而节省一大堆的时间,不过使用这种方法有两个弊端:

你将错过那些面向对象的知识,因为它可能在你的游戏中使得数据建模更有效率的东西。

最大的商业游戏,包括第一人称射击游戏很多并没有使用C++。但是,这些程序的作者即使使用老的C的格式,他们通常坚持使用面向对象编程技术。如果你只想学C,至少要自学OO(面向对象)编程技术。OO是仿真(游戏)的完美方法,如果你不学习OO,你将不得不“辛苦”的工作。

4、汇编语言

显然,汇编是第一个计算机语言。汇编语言实际上是你计算机处理器实际运行的指令的命令形式表示法。这意味着你将与处理器的底层打交道,比如寄存器和堆栈。如果你要找的是类英语且有相关的自我说明的语言,这不是你想要的。

确切的说,任何你能在其他语言里做到的事情,汇编都能做,只是不那么简单 — 这是当然,就像说你既可以开车到某个地方,也可以走路去,只是难易之分。话虽不错,但是新技术让东西变得更易于使用。

总的来说,汇编语言不会在游戏中单独应用。游戏使用汇编主要是使用它那些能提高性能的零零碎碎的部分。比如说,毁灭战士整体使用C来编写,有几段绘图程序使用汇编。这些程序每秒钟要调用数千次,因此,尽可能的简洁将有助于提高游戏的性能。而从C里调用汇编写的函数是相当简单的,因此同时使用两种语言不成问题。

特别注意:语言的名字叫“汇编”。把汇编语言翻译成真实的机器码的工具叫“汇编程序”。把这门语言叫做“汇编程序”这种用词不当相当普遍,因此,请从这门语言的正确称呼作为起点出发。

优点:最小、最快的语言。汇编高手能编写出比任何其他语言能实现的快得多的程序。你将是利用处理器最新功能的第一人,因为你能直接使用它们。

缺点:难学、语法晦涩、坚持效率,造成大量额外代码 — 不适于心脏虚弱者。

移植性:接近零。因为这门语言是为一种单独的处理器设计的,根本没移植性可言。如果使用了某个特殊处理器的扩展功能,你的代码甚至无法移植到其他同类型的处理器上(比如,AMD的3DNow指令是无法移植到其它奔腾系列的处理器上的)。

使用汇编编写的游戏:我不知道有什么商业游戏是完全用汇编开发的。不过有些游戏使用汇编完成多数对时间要求苛刻的部分。

资料:如果你正在找一门汇编语言的文档,你主要要找芯片的文档。网络上如Intel、AMD、Motorola等有一些关于它们的处理器的资料。对于书籍而言,《Assembly Language: Step-By-Step》是很值得学习的。

5、Pascal语言

Pascal语言是由Nicolas Wirth在七十年代早期设计的,因为他对于FORTRAN和COBOL没有强制训练学生的结构化编程感到很失望,“空心粉式代码”变成了规范,而当时的语言又不反对它。Pascal被设计来强行使用结构化编程。最初的Pascal被严格设计成教学之用,最终,大量的拥护者促使它闯入了商业编程中。当Borland发布IBM PC上的 Turbo Pascal时,Pascal辉煌一时。集成的编辑器,闪电般的编译器加上低廉的价格使之变得不可抵抗,Pascal编程了为MS-DOS编写小程序的首选语言。

然而时日不久,C编译器变得更快,并具有优秀的内置编辑器和调试器。Pascal在1990年Windows开始流行时走到了尽头,Borland放弃了Pascal而把目光转向了为Windows 编写程序的C++。Turbo Pascal很快被人遗忘。

最后,在1996年,Borland发布了它的“Visual Basic杀手”— Delphi。它是一种快速的带华丽用户界面的 Pascal编译器。由于不懈努力,它很快赢得了一大群爱好者。

基本上,Pascal比C简单。虽然语法类似,它缺乏很多C有的简洁 *** 作符。这既是好事又是坏事。虽然很难写出难以理解的“聪明”代码,它同时也使得一些低级 *** 作,如位 *** 作变得困难起来。

优点:易学、平台相关的运行(Delphi)非常好。

缺点:“世界潮流”面向对象的Pascal继承者(Modula、Oberon)尚未成功。语言标准不被编译器开发者认同。专利权。

移植性:很差。语言的功能由于平台的转变而转变,没有移植性工具包来处理平台相关的功能。

使用Pascal编写的游戏:几个。DirectX的Delphi组件使得游戏场所变大了。

资料:查找跟Delphi有关的资料,请访问:Inprise Delphi page。

6、Visual Basic

哈,BASIC。回到八十年代的石器时代,它是程序初学者的第一个语言。最初的BASIC形式,虽然易于学习,却是可怕的无组织化,它义无反顾的使用了GOTO充斥的“空心粉式代码”。当回忆起BASIC的行号和GOSUB命令,没有几个人能止住眼角的泪水。

快速前进到九十年代早期,虽然不是苹果公司所希望的巨人,HyperCard仍然是一个在Windows下无法比拟的吸引人的小型编程环境。Windows下的HyperCard克隆品如ToolBook又慢又笨又昂贵。为了与HyperCard一决高下,微软取得了一个小巧的名为Thunder编程环境的许可权,并把它作为Visual Basci 10发布,其用户界面在当时非常具有新意。这门语言虽然还叫做Basic(不再是全部大写),但更加结构化了,行号也被去除。实际上,这门语言与那些内置于TRS-80、Apple II及Atari里的旧的ROM BASIC相比,更像是带Basic风格动词的Pascal。

经过六个版本,Visual Basic变得非常漂亮。用户界面发生了许多变化,但依然保留着“把代码关联到用户界面”的主旨。这使得它在与即时编译结合时变成了一个快速原型的优异环境。

优点:整洁的编辑环境。易学、即时编译导致简单、迅速的原型。大量可用的插件。虽然有第三方的DirectX插件,DirectX 7已准备提供Visual Basic的支持。

缺点:程序很大,而且运行时需要几个巨大的运行时动态连接库。虽然表单型和对话框型的程序很容易完成,要编写好的图形程序却比较难。调用Windows的API程序非常笨拙,因为VB的数据结构没能很好的映射到C中。有OO功能,但却不是完全的面向对象。专利权。

移植性:非常差。因为Visual Basic是微软的产品,你自然就被局限在他们实现它的平台上。也就是说,你能得到的选择是:Windows,Windows或Widnows。当然,有一些工具能将VB程序转变成Java。

使用Visual Basic编写的游戏:一些。有很多使用VB编写的共享游戏,还有一些是商业性的。

资料:微软的VB页面有一些信息。

7、Java

Java是由Sun最初设计用于嵌入程序的可移植性“小C++”。在网页上运行小程序的想法着实吸引了不少人的目光,于是,这门语言迅速崛起。事实证明,Java不仅仅适于在网页上内嵌动画 — 它是一门极好的完全的软件编程的小语言。“虚拟机”机制、垃圾回收以及没有指针等使它很容易实现不易崩溃且不会泄漏资源的可靠程序。

虽然不是C++的正式续篇,Java从C++ 中借用了大量的语法。它丢弃了很多C++的复杂功能,从而形成一门紧凑而易学的语言。不像C++,Java强制面向对象编程,要在Java里写非面向对象的程序就像要在Pascal里写“空心粉式代码”一样困难。

优点:二进制码可移植到其他平台。程序可以在网页中运行。内含的类库非常标准且极其健壮。自动分配合垃圾回收避免程序中资源泄漏。网上数量巨大的代码例程。

缺点:使用一个“虚拟机”来运行可移植的字节码而非本地机器码,程序将比真正编译器慢。有很多技术(例如“即时”编译器)很大的提高了Java的速度,不过速度永远比不过机器码方案。早期的功能,如AWT没经过慎重考虑,虽然被正式废除,但为了保持向后兼容不得不保留。越高级的技术,造成处理低级的机器功能越困难,Sun为这门语言增加新的“受祝福”功能的速度实在太慢。

移植性:最好的,但仍未达到它本应达到的水平。低级代码具有非常高的可移植性,但是,很多UI及新功能在某些平台上不稳定。

使用Java编写的游戏:网页上有大量小的Applet,但仅有一些是商业性的。有几个商业游戏使用Java作为内部脚本语言。

资料:Sun的官方Java页面有一些好的信息。IBM也有一个非常好的Java页面。JavaLobby是一个关于Java新闻的最好去处。

8、创作工具

上面所提及的编程语言涵盖了大多数的商业游戏。但是也有一个例外,这个大游戏由于它的缺席而变得突出。

“神秘岛”。没错,卖得最好的商业游戏不是使用以上任何一门语言编的,虽然有人说“神秘岛”99%是使用 3D建模工具制作的,其根本的编程逻辑是在HyperCard里完成的。

多数创作工具有点像Visual Basic,只是它们工作在更高的层次上。大多数工具使用一些拖拉式的流程图来模拟流程控制。很多内置解释的程序语言,但是这些语言都无法像上面所说的单独的语言那样健壮。

优点:快速原型 — 如果你的游戏符合工具制作的主旨,你或许能使你的游戏跑得比使用其他语言快。在很多情况下,你可以创造一个不需要任何代码的简单游戏。使用插件程序,如Shockware及IconAuthor播放器,你可以在网页上发布很多创作工具生成的程序。

缺点:专利权,至于将增加什么功能,你将受到工具制造者的支配。你必须考虑这些工具是否能满足你游戏的需要,因为有很多事情是那些创作工具无法完成的。某些工具会产生臃肿得可怕的程序。

移植性:因为创作工具是具有专利权的,你的移植性以他们提供的功能息息相关。有些系统,如Director可以在几种平台上创作和运行,有些工具则在某一平台上创作,在多种平台上运行,还有的是仅能在单一平台上创作和运行。

使用创作工具编写的游戏:“神秘岛”和其他一些同类型的探险游戏。所有的Shockwave游戏都在网络上。

资料:Director、HyperCard、SuperCard、IconAuthor、Authorware。

9、易语言

★全中文支持,无需跨越英语门槛。★全可视化编程,支持所见即所得程序界面设计和程序流程编码。★中文语句快速录入。提供多种内嵌专用输入法,彻底解决中文语句输入速度慢的问题。★代码即文档。自动规范强制代码格式转换,任何人编写的任何程序源代码格式均统一。★参数引导技术,方便程序语句参数录入。★无定义类关键字。所有程序定义部分均采用表格填表方式,用户无需记忆此类关键字及其使用格式。★命令格式统一。所有程序语句调用格式完全一致。★语法格式自动检查。自动检查并提示所输入语句的语法格式是否正确,且可自动添加各类名称。★全程提示与帮助。鼠标停留立即显示相关项目提示。编程时提示语法格式,调试时提示变量当前内容,随时按下F1键可得到与当前主题相关详细帮助等。★名称自动管理。用户修改任一名称定义,其它所有包含该名称的程序代码均自动修正。★集成化开发环境。集界面设计、代码编写、调试分析、编译打包等于一体。★学习资源丰富。详细的帮助文件、数十兆的知识库、数万用户的网上论坛、教材已出版发行……

10、结论

你可能希望得到一个关于“我该使用哪种语言”这个问题的更标准的结论。非常不幸,没有一个对所有应用程序都最佳的解决方案。C适于快而小的程序,但不支持面向对象的编程。C++完全支持面向对象,但是非常复杂。Visual Basic与Delphi易学,但不可移植且有专利权。Java有很多简洁的功能,但是慢。创作工具可以以最快的速度产生你的程序,但是仅对某一些类型的程序起作用。最好的方法是决定你要写什么样的游戏,并选择对你的游戏支持最好的语言。“试用三十天”的做法成为工业标准是件好事情。

翻译题都翻译了半天。。。还有好多没怎么明白。。英语渣。。。哎。。

假如你有N副扑克牌,每副扑克牌包含4种花色13种点数,我们的目的是计算如果从我们随机选中的扑克牌组合中抽一张牌,需要多少次能够达到以下目的(至少一个?)

a、每个花色一张牌;

b、每个点数一张牌;

c、一副牌中红心的所有13张不同点数的牌;

e、我们选中的扑克牌组合中的所有一套红心牌;

e、一整副完整的扑克;

编写一个程序DeckShufflejava,让用户录入N的值并进行洗牌,你的程序应该打印出洗牌后的所有牌,每行的信息如下展示:

% java DeckShuffle 5 // 执行java文件 并指定入参为5

Four of Hearts // 红桃4

Queen of Clubs// 梅花Q

编写另外一个程序DeckCollectorjava,取得一个洗牌后的集合作为初始数组,数组大小为能够达到上诉目的牌的数量。

(PS:第二个问题,没怎么明白。。。随便瞎猜着翻译的。。。也不知道对不对。。。)

代码的话自己写是最好的(我会告诉你我是因为懒才不想写的么?)我这可以提供一些自己简单的思路。。

以上就是关于急急急!高分请求Java编程 做一个发牌的程序全部的内容,包括:急急急!高分请求Java编程 做一个发牌的程序、有JAVA编写程序,左手有13张牌梅花2-A,右手13张红心2-A,洗牌右手的每张压在左手的每张上,、JAVA 52张洗牌如何编等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9336998.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存