Avatar billede Slettet bruger
09. juli 2007 - 17:43 Der er 7 kommentarer og
1 løsning

lave en terning

hejsa allesammen ..

Jeg skal ha lavet mig en terning, som tilfældigt viser fra 1 - 6.

men er meget ny i C++, og har derfor ikke rigtig nogen ide om hvad jeg skal bruge :)

Nogen der kan hjælpe mig igennem det? og forklare hvad der gøres og hvorfor ?:)

MvH. W.
Avatar billede webdesigner Praktikant
09. juli 2007 - 18:10 #1
i 3d eller bar en random generator ?
Avatar billede webdesigner Praktikant
09. juli 2007 - 18:12 #2
int main(void)
{  clrscr();
  int k;
  float i;
    clock_t s,f;
  randomize();
  f=clock();
  while(getch()==' ')
  {/*  cout<<random(100)<<'\n'; /*/
  s=clock();
  i=(s-f)/CLK_TCK;
  if(i>0.7)
  break;
  clrscr();
  cout<<(k=rand()%5+1);
  f=clock();

  } clrscr();
  cout<<"the no' u got"<<'\t';
  cout<<k;
    getch();
  return 0;
}
fande denne tror den bruger klokken for at den bliver rigtig random der er nogel rand generator koder er altid er ens... så ved at bruge klokken bliver den merer tilfældig
Avatar billede webdesigner Praktikant
09. juli 2007 - 18:13 #3
her er en merer...
#############################################################
#Dice_roller.py
#
#Purpose:  A random number generation program that simulates
#  various dice rolls.
#Author:  Cody Jackson
#Date:  4/11/06
#
#Copyright 2006 Cody Jackson
#This program is free software; you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation; either version 2 of the License, or
#(at your option) any later version.
#
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#GNU General Public License for more details.
#
#You should have received a copy of the GNU General Public License
#along with this program; if not, write to the Free Software
#Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
#############################################################

import random #randint

def randomNumGen(choice):
    """Get a random number to simulate a d6, d10, or d100 roll."""
   
    if choice == 1: #d6 roll
        die = random.randint(1, 6)
    elif choice == 2: #d10 roll
        die = random.randint(1, 10)
    elif choice == 3: #d100 roll
        die = random.randint(1, 100)
    else:  #simple error message
        print "Shouldn't be here.  Invalid choice"
    return die

def multiDie(dice_number, die_type):
    """Add die rolls together, e.g. 2d6, 4d10, etc."""
   
#---Initialize variables   
    final_roll = 0
    val = 0
   
    while val < dice_number:
        final_roll += randomNumGen(die_type)
        val += 1
    return final_roll

def test():
    """Test criteria to show script works."""
   
    _1d6 = multiDie(1,1)  #1d6
    print "1d6 = ", _1d6,   
    _2d6 = multiDie(2,1)  #2d6
    print "\n2d6 = ", _2d6,
    _3d6 = multiDie(3,1)  #3d6
    print "\n3d6 = ", _3d6,
    _4d6 = multiDie(4,1)  #4d6
    print "\n4d6 = ", _4d6,
    _1d10 = multiDie(1,2)  #1d10
    print "\n1d10 = ", _1d10,
    _2d10 = multiDie(2,2)  #2d10
    print "\n2d10 = ", _2d10,
    _3d10 = multiDie(2,2)  #3d10
    print "\n3d10 = ", _3d10,
    _d100 = multiDie(1,3)  #d100
    print "\n1d100 = ", _d100,   
   
if __name__ == "__main__":  #run test() if calling as a separate program
    test()
Avatar billede webdesigner Praktikant
09. juli 2007 - 18:15 #4
og her er der en dansk link ....

http://www.udvikleren.dk/Thread.aspx?f=1&t=315
Avatar billede Slettet bruger
09. juli 2007 - 18:46 #5
Det er bare helt alm. komandopromt, så ikke noget 3D :) jeg prøver lige at kigge på linket en gang :)
Avatar billede bauerdata Nybegynder
09. juli 2007 - 21:44 #6
Avatar billede Slettet bruger
10. juli 2007 - 13:05 #7
Bare for at undgå forvirring: bauerdata og webdesigner har henvist til koder som er skrevet i Python som ikke er det samme som C++...

/* Først inkluderer vi header filer der indeholder informationer
om de funktioner vi skal bruge. Måske hedder de ikke de samme
i dit tilfælde - det kommer an på compileren. Fx. compilerer
jeg til Windows med MS Visual C++. */

#include "stdafx.h"        // Den skal bare altid med når man laver windows
#include <stdlib.h>        // Denne indeholder rand() og srand()
#include "time.h"        // Denne indeholder time()

int _tmain(int argc, _TCHAR* argv[])
{
    int dice;

    /* Her seeder vi randomizeren med den aktuelle tid. Dette skyldes det som
    webdesigner påpejer (hvis du ikke gør det får du samme tal ud hver gang. */

    srand ( time(NULL) );   

    /* Her genererer vi det tilfældige tal. Rand() returnerer et tal mellem
    1 og 32767 (normalt). Den måde vi får et tal mellem 1 og 6 er ved at bruge
    operatoren "%" - som er "resten" når man dividerer med fx. 6. Vi lægger 1 til
    for at få tal mellem 1 og 6 i stedet for 0 og 5. */

    dice = (rand() % 6) + 1;

    /* Denne linie printer tallet ud på skærmen. */

    printf("Output: %d\n", dice);
   
    /* Her returnerer programmet værdien, hvilket ikke er det samme som
    at skrive den ud på skærmen. */

    return dice;
}

/*
Hvis du i stedte for VC++ bruger f.eks. gcc compileren så skal din main se
lidt anderledes ud: int main. (int argc, const char* argv[])

Programmer lukker automatisk, så du kan sikkert ikke nå at se outputtet. Hvis
du vil undgå dette kan du indsætte kommandoen system("pause") før return eller
du kan køre programmet fra en i forvejen åben terminal.
*/
Avatar billede Slettet bruger
10. juli 2007 - 16:02 #8
Jeg har fundet frem til denne kode:

#include <ctime>
#include <string>
#include <iostream>
#include <cstdlib>
using namespace std;

int kast()
{

    srand(time(NULL));
    for(int i=0; i<1; i++)
    {
        int ojne1 = rand()%6+1;
        int ojne2 = rand()%6+1;
        cout << "Terning 1 :" << ojne1 << endl;
        cout << "Terning 2 :" << ojne2 << endl << endl;
        cout << "Resultat: " << ojne1 << " + " << ojne2 << " = " << ojne1 + ojne2 << endl;

    }
}

  int main() {
      cout << "'a' -> Enter for terninger. 'b' -> Enter for at lukke" << endl;
      int i = 0;

      while(i == 0)
      {
          char valg;

          cin >> valg;
          if(valg == 'a')
          {
              kast();
          }
          else if(valg == 'b') {
              i = 1;
          }
      }
  }


Og den virker sådan set også fint nok. men vil godt ha den til at slette den tidligere terning når man beder om en ny "a -> Enter" ..

Nogen der har en ide til hvordan det skal gøres?:)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester