Разработка программного обеспечения для игры "Косынка"

Автор работы: Пользователь скрыл имя, 08 Июля 2013 в 13:53, курсовая работа

Описание работы

Данная курсовая работа представляет собой результат разработки игры «Косынка» с использованием объектно-ориентированного языка программирования Java. Суть работы заключалась в правильном создании модели игры и дальнейшего ее проектирования с использованием ООП. Необходимо было научиться создавать объекты и создавать связи (взаимодействия между ними).

Содержание работы

ВВЕДЕНИЕ….. ……………………………………………………………….5
1 ОПИСАНИЕ И АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ…………..……..6
1.1 Постановка задачи………………………………………………...6
1.2 Анализ предметной области……………………………………...6
1.3 Формирование требований……………………………………….7
2 ДИАГРАММЫ КЛАССОВ И ОБЪЕКТОВ….………………………….....9
2.1 Диаграмма классов……………………………………………......9
2.2 Диаграмма объектов…………………………………...……….....11
3 ОПИСАНИЕ КЛАССОВ И МЕТОДОВ………………………..……….....12
3.1 Класс Card………………………………….………………….…..12
3.2 Класс Koloda ………………….…………………………………..12
3.6 Класс Stopka ………………………………………………………12
3.6 Класс Dom ………………………………………………………...13
3.6 Класс Sdacha ……………………………………………………...13
3.6 Класс StructFind…………………………………………………..13
3.6 Класс Stol ………….……………………………………………...13
4 ПРИМЕР РЕАЛИЗАЦИИ МЕТОДА………….………….……………….15
ВЫВОД……………………………………………………………………….17
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ…………………..……..18

Файлы: 1 файл

kurs.doc

— 743.50 Кб (Скачать файл)

При добавлении карты  из «раздачи» в стопку, карта из «раздачи» удаляется (Рисунки 3-4).

Рисунок 3 –Перемещение карты 5b из «раздачи» в стопку

 

 

 

Рисунок 4 –Перемещение карты 5b из «раздачи» в стопку

 

ВЫВОД

В результате выполнения курсовой работы я разработала игру «Косынка». Я расширила свои знания в языке Java, узнала широту его возможностей. Я научилась создавать объекты и устанавливать взаимодействия между ними.

Кроме того, я научилась анализировать проект и визуально отображать его содержимое (диаграммы классов, объектов). Я также научилась формулировать требования к проекту и реализовывать их программно.

Приобретенные знания я смогу использовать в дальнейшем.

 

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

1. Герберт Шилдт Руководство для начинающих. Java 2. Издание 4. – М.: Издательский дом “Вильямс”,2001.

2. Хорстман Кей С., Коренелл Г. Библиотека профессионала. Java 2. Том 1. Основы. -  М.: Издательский дом “Вильямс”, 2004.

3. http://wikipedia.org - свободная энциклопедия.

4. http://www.game.ru/kosinka – теория игры «Косынка»

5. http://berkut.homelinux.com – материалы сайта Евгения Беркунского

 

ПРИЛОЖЕНИЕ А

Фрагменты кода игры

public class Card {

    private int mast;

    private int starshinstvo;

    private int sostoyanie;//перевернута или нет

    public static int numMast=4;//количество мастей

    public static int numStarsh=13;//количество значений карт

 

    Card() {

        this.mast = 2;

        this.starshinstvo = 6;

        this.sostoyanie = 1;

    }

 

    public boolean isBlack(){

        if(getMast()<2)

            return true;

        return false;

    }

   

     public boolean isRed(){

        return !isBlack();

    }

 

    public void setMast(int mast) {

        this.mast = mast;

    }

 

   public void setStarshinstvo(int starshinstvo) {

        this.starshinstvo = starshinstvo;

    }

 

    public void setSostoyanie(int sostoyanie) {

        this.sostoyanie = sostoyanie;

    }

   

 

    public int getMast() {

        return mast;

    }

 

    public int getStarshinstvo() {

        return starshinstvo;

    }

 

    public int getSostoyanie() {

        return sostoyanie;

    }

 

 

   

 

    public Card(int mast, int starshinstvo, int sostoyanie) {

        this.mast = mast;

        this.starshinstvo = starshinstvo;

        this.sostoyanie = sostoyanie;

    }

   

    public void output(){

       

        if(getSostoyanie()==0)

        {

            System.out.printf("[]");

            return;

        }

 

        System.out.print(name());

       

    }

   

    public String name(){

        String m = null;//mast

        String s=null;//starshinstvo

       

        switch(getStarshinstvo()){

            case 12: s="K";break;

            case 11: s="Q";break;

            case 10: s="J";break;

           case 9:  s="T";break;

            default:  s=Integer.toString(getStarshinstvo()+1);break;

        }

        switch(getMast()){

            case 0: m="p";break;

            case 1: m="t";break;

            case 2: m="b";break;

            case 3: m="c";break;

            default:  System.out.printf("Fault");break;

        }

        return s+m;

       

    }

 

public class Koloda {

    int N=52;

    private Card [] koloda= new Card[N];

 

    public Koloda() {

       fillKoloda();

    }

 

    public int getN() {

        return N;

    }

 

    public Card[] getKoloda() {

        return koloda;

    }

   

 

    public void fillKoloda(){

       

    int c=0;

    for(int i=0;i<Card.numMast;++i){

      for(int j=0;j<Card.numStarsh;++j){

          Card a=new Card(i,j,0);

          koloda[c++]=a;

      }

    }

}

   

    public void peretosovat(){

        int a,b;//промежуточные переменные,содержащие случайные числа

        Card c=null;

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

            a=(int) (Math.random()*1000)%52;

            b=(int) (Math.random()*1000)%52;

            c=koloda[a];

            koloda[a]=koloda[b];

            koloda[b]=c;

        }

    }

   

    public void output(){

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

            System.out.printf(" %d ",i);

            koloda[i].output();

          

 

        }

           

    }

  

}

 

public class Stopka {

   

    List <Card> stopka=new ArrayList<>();

    public static int numStopok=7;//количество стопок

   

   

    public void output(){

        int size = stopka.size();

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

            stopka.get(i).output();

            System.out.printf(" ");

        }

        System.out.println();

     }

    public void openLastCard(){

        if(stopka.isEmpty()) return;

        stopka.get(stopka.size()-1).setSostoyanie(1);

    }

   

    public Card getLastCard(){

        if(stopka.isEmpty()) return null;

        return stopka.get(stopka.size()-1);

    }

   

    public Card getFirstCard(){

        if(stopka.isEmpty()) return null;

        return stopka.get(0);

    }

   

    public void closeCards(){

        int size=stopka.size();

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

            stopka.get(i).setSostoyanie(0);

    }

}

public class Stol {

    int N=7;

    Koloda k=new Koloda();

   

   

    Dom dom=new Dom();

    Sdacha sd=new Sdacha();

    List <Stopka> stopki=new ArrayList<>();

    Stopka selected=new Stopka();//перетаскиваемые карты

   

    public Stol() {

        k.peretosovat();

        int kolN=0;//

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

            Stopka s=new Stopka();

            stopki.add(s);

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

            {

                stopki.get(i).stopka.add(k.getKoloda()[kolN++]);

            }

            stopki.get(i).openLastCard();

        }

        sd.opened.stopka.add(k.getKoloda()[kolN++]);//Добавление в открытую часть сдачи карт.

        sd.opened.openLastCard();

        while(kolN<k.getN()){

            sd.closed.stopka.add(k.getKoloda()[kolN++]);//Добавление в склытую часть сдачи карт.

        }

    }

   

    public void output(){

        int sdClosedSize = sd.closed.stopka.size();

        int sdOpenedSize = sd.opened.stopka.size();

       

        System.out.printf("Стол");

        System.out.println();

        sd.output();

       

        int size = stopki.size();

        System.out.printf("Стол.Стопки\n");

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

            System.out.printf("Стопка %d ",i);

            stopki.get(i).output();

        }

        dom.output();

    }

    public void moveStopkaDom(int s){

        Stopka stDom = null;

       

        Card cd=stopki.get(s).getLastCard();

        if(cd==null) return;

        else{

            switch(cd.getMast()){

                case 0: stDom=dom.A; break;

                case 1: stDom=dom.B; break;

                case 2: stDom=dom.C; break;

                case 3: stDom=dom.D; break;

            }

            Card a=stDom.getLastCard();

            if( (a==null && cd.getStarshinstvo()==0) ||

                    (cd.getStarshinstvo()-a.getStarshinstvo()==1)){

                stopki.get(s).stopka.remove(cd);

                stDom.stopka.add(cd);

                stopki.get(s).openLastCard();

            }

               

        }

    }

   

    /*

     * Перемещение масти mast из дома  в стопку s.

     */

    public void moveDomStopka(int mast, int s ){

        Card cd=null;

        Stopka a=null;

        switch(mast){

            case 0:a=dom.A;break;

            case 1:a=dom.B;break;

            case 2:a=dom.C;break;

            case 3:a=dom.D;break;

        }

        if(a!=null)

        {

            cd=a.getLastCard();

            if(cd!=null)

                a.stopka.remove(cd);

                stopki.get(s).stopka.add(cd);

        }

       

    }

    /*

     * Перемещение из количества карт num из стопки sFrom в стопку sTo.

     */

   

    public void moveStopkaStopka(int sFrom, int sTo, int num ){

       

        Card cd=stopki.get(sFrom).stopka.get(stopki.get(sFrom).stopka.size()-num);//snimaem num ot kraya kart

        if(cd==null || cd.getSostoyanie()==0)

                return;

        Card a=stopki.get(sTo).getLastCard();//karta iz stopki 2

       

        if((a==null && cd.getStarshinstvo()==12)

                || (a!=null && a.isBlack()!=cd.isBlack() &&

                 a.getStarshinstvo()-cd.getStarshinstvo()==1))

        {

            int iFrom=stopki.get(sFrom).stopka.size()-num;

             int iTo=stopki.get(sFrom).stopka.size();

           

           

            List<Card> subList = stopki.get(sFrom).stopka.subList(iFrom,iTo);

 

            stopki.get(sTo).stopka.addAll(subList);

           

            stopki.get(sFrom).stopka.removeAll(subList);

            stopki.get(sFrom).openLastCard();

        }

    }

   

    public void moveRazdachaStopka(int sTo){

       

        Card cd=sd.opened.getLastCard();//karta iz razdachi

        if(cd==null) return;

        Card a=stopki.get(sTo).getLastCard();//karta iz stopki

        if((a==null && cd.getStarshinstvo()==12)

                ||(a!=null && a.isBlack()!=cd.isBlack() && a.getStarshinstvo()-cd.getStarshinstvo()==1))

        {

            sd.opened.stopka.remove(cd);

            stopki.get(sTo).stopka.add(cd);

           

        }

           

    }

  

 

   

    public void moveRazdachaDom(){

        Stopka stDom = null;

       

        Card cd=sd.opened.getLastCard();

        if(cd==null) return;

        else{

            switch(cd.getMast()){

                case 0: stDom=dom.A; break;

                case 1: stDom=dom.B; break;

                case 2: stDom=dom.C; break;

                case 3: stDom=dom.D; break;

            }

            Card a=stDom.getLastCard();

            if( (a==null && cd.getStarshinstvo()==0) ||

                    (cd.getStarshinstvo()-a.getStarshinstvo()==1)){

                sd.opened.stopka.remove(cd);

                stDom.stopka.add(cd);

            }   

        }

    }

   

    /*

     * Перемещение одной карты из  закрытой части раздачи в открытую часть раздачи.

     */

   

 

public void openNext(){

        Card cd=sd.closed.getFirstCard();

        if(cd == null)

        {

            sd.closed.stopka.addAll(sd.opened.stopka);

            sd.opened.stopka.clear();

            sd.closed.closeCards();

        }

        else

        {

            sd.closed.stopka.remove(cd);

            sd.opened.stopka.add(cd);

            cd.setSostoyanie(1);

        }

       

    }

 

 

 

public StructFind findByName(String name){

    StructFind f=new StructFind();

    if(name.equals("0") || name.equals("1") || name.equals("2") ||

            name.equals("3") || name.equals("4") || name.equals("5") || name.equals("6") ||

            name.equals("7") || name.equals("8") || name.equals("9") || name.equals("10"))

    {

        f.indOfStopka=Integer.parseInt(name);

        f.indOfCard=0;

        f.numCards=0;

        return f;

    }

    Card a=null;

    int ind=0;

    for(int i=0;i<k.getN();++i){

        if(k.getKoloda()[i].name().equals(name))

        {

            a=k.getKoloda()[i];

            break;

        }

    }

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

        ind=stopki.get(i).stopka.indexOf(a);//nahodit index zadanoy karti po imeni v kolode

        if(ind!=-1 && a.getSostoyanie()!=0)

        {

            f.indOfStopka=i;

            f.indOfCard=ind;

            f.numCards=stopki.get(i).stopka.size()-f.indOfCard;

            return f;

        }

     }

     if(sd.opened.getLastCard()!=null && sd.opened.getLastCard().name().equals(name)){

         f.indOfStopka=11;

         f.indOfCard=sd.opened.stopka.size()-1;

         f.numCards=1;

         return f;

     }

     if(dom.A.getLastCard()!=null && dom.A.getLastCard().name().equals(name)){

         f.indOfStopka=7;

         f.indOfCard=dom.A.stopka.size()-1;

         f.numCards=1;

         return f;

     }

     if(dom.B.getLastCard()!=null && dom.B.getLastCard().name().equals(name)){

         f.indOfStopka=8;

         f.indOfCard=dom.B.stopka.size()-1;

         f.numCards=1;

         return f;

     }

     if(dom.C.getLastCard()!=null && dom.C.getLastCard().name().equals(name)){

         f.indOfStopka=9;

         f.indOfCard=dom.C.stopka.size()-1;

         f.numCards=1;

         return f;

     }

     if(dom.D.getLastCard()!=null && dom.D.getLastCard().name().equals(name)){

         f.indOfStopka=10;

         f.indOfCard=dom.D.stopka.size()-1;

         f.numCards=1;

         return f;

     }

    return null; 

}   

    public void loop1(){

        StructFind sFrom=null;

        StructFind sTo=null;

        boolean exit=true;

        Scanner scan= new Scanner(System.in);

        while(exit){

            output();

            System.out.println("Menu:\nExit - Exit from program;");

            System.out.println("n - Next Card;");

            System.out.println("From  To: 7b 8t");

           

            String from = null;

            String to = null;

            String a=scan.nextLine();

            String[] split = a.split(" ");

             System.out.println(a);

            if(split.length==1){

                from=split[0];

                 sFrom=findByName(from);

            }

            else if(split.length==2){

                from=split[0];

                to=split[1];

            sFrom=findByName(from);

            sTo=findByName(to);

            }

 

 

           

            if(from.equals("exit"))

               exit=false;

            else if(to!=null && to.equals("0")&& sFrom!=null && (sFrom.indOfStopka>=0 && sFrom.indOfStopka<7))

                moveStopkaStopka(sFrom.indOfStopka, 0, sFrom.numCards);

           else if(to!=null && to.equals("1")&& sFrom!=null && (sFrom.indOfStopka>=0 && sFrom.indOfStopka<7))

                moveStopkaStopka(sFrom.indOfStopka, 1, sFrom.numCards);

            else if(to!=null && to.equals("2")&& sFrom!=null && (sFrom.indOfStopka>=0 && sFrom.indOfStopka<7))

                moveStopkaStopka(sFrom.indOfStopka, 2, sFrom.numCards);

            else if(to!=null && to.equals("3")&& sFrom!=null && (sFrom.indOfStopka>=0 && sFrom.indOfStopka<7))

                moveStopkaStopka(sFrom.indOfStopka, 3, sFrom.numCards);

            else if(to!=null && to.equals("4")&& sFrom!=null && (sFrom.indOfStopka>=0 && sFrom.indOfStopka<7))

                moveStopkaStopka(sFrom.indOfStopka, 4, sFrom.numCards);

            else if(to!=null && to.equals("5")&& sFrom!=null && (sFrom.indOfStopka>=0 && sFrom.indOfStopka<7))

                moveStopkaStopka(sFrom.indOfStopka, 5, sFrom.numCards);

            else if(to!=null && to.equals("6")&& sFrom!=null && (sFrom.indOfStopka>=0 && sFrom.indOfStopka<7))

                moveStopkaStopka(sFrom.indOfStopka, 6, sFrom.numCards);

              

            else if(from.equals("n"))

                openNext();

           

            else if(sTo!=null && sFrom!=null && (sTo.indOfStopka>=0 && sTo.indOfStopka<7) && sFrom.indOfStopka==11){

Информация о работе Разработка программного обеспечения для игры "Косынка"