Inlägg

Inlägg som gustavwth har skrivit i forumet
Av gustavwth

800 för i3an

Av gustavwth

Watch Dogs 2 (PC) kod

Hej
Säljer en kod till spelet Watch Dogs 2 (PC) som följde med vid ett grafikkortsköp.

Läs hela annonsen här

Av gustavwth
Av gustavwth

Om du vill utöka spelet så det går att använda muspekare, krävs lite annat tänk än ett vanligt sekventiellt program.

Om du vill använda musen och tangentbord måste man hantera händelser, då får man skriva ett spel på ett litet annat sätt.
Förslagsvis har man en tillståndsmaskin där spelet kan vara i flera olika lägen. Exempelvis ett tillstånd för meny, en för spelarens tur och en för datorns tur.

För att hantera mus & tangentbords-tryck har man en händelsehanterare, som ser till att det som ska utföras när en händelse inträffar sker.

Här är exemplet utökat för att klara av att hantera knapptryck med musen för att placera spelpjäserna.

Det är också bra att försöka separera spellogiken från grafiken, och händelsesystemet så mycket som möjligt. Ett designmönster som kallas MVC.

Nu är detta exempel skrivet i en enda fil med kommentarer för att det ska vara enkelt att överblicka och förstå.

Jag rekommenderar att du skriver ett mindre spel, men jag tror det är lärorikt att förstå hur det kan fungera.

Sedan om du vill har ett spel med finare grafik, ljud m.m, skulle jag rekommendera att du provar SDL.

// ---------------------------- // | Fem-I-Rad Spel Med Musen | // ---------------------------- #include <windows.h> // Händelser. #include <stdio.h> // Inmatning. #include <stdlib.h> // Slumpgenerator. #include <time.h> // Klockan.(används bara av slumpgeneratorn) // ------------------------------------------------------------------------------------------------------ // ---------------------- HÄNDELSE-KOD FÖRBEREDELSER ---------------------------------------------------- // ------------------------------------------------------------------------------------------------------ // Definierar konstanter till fönster och händelser. #define MOUSE_PRESSED_OR_RELEASED 0 // 0 betyder att knapp är tryckt eller släppt. #define EVENT_BUFFER_SIZE 128 // Antal händelser som kan lagras i bufferten för händelser. // Globala variabler till fönster och händelser. INPUT_RECORD eventInputBuffer[EVENT_BUFFER_SIZE]; // Händelse Buffert DWORD nrOfEvents; // Antal händelser som ligger i händelse bufferten. HANDLE consoleInputHandle = GetStdHandle(STD_INPUT_HANDLE); // Hämtar hantaget till standard input som hör till konsollen. HANDLE consoleOutputHandle = GetStdHandle(STD_OUTPUT_HANDLE);// Hämtar hantaget till standard output som hör till konsollen. // Funktioner för händelsehantering. void initConsole(); // Ställer in konsollen för att hantera händelser. void clearScreen(); // Rensar skärmen och ställer in konsollen för att hantera händelser på nytt. void eventHandler(); // Läser in och hanterar händelser. void keyboardEventHandler(KEY_EVENT_RECORD); // Hanterar tangentbords-tryckningar. void mouseEventHandler(MOUSE_EVENT_RECORD); // Hanterar mus-tryckningar. // ------------------------------------------------------------------------------------------------------ // ---------------------- SPEL-KOD FÖRBEREDELSER -------------------------------------------------------- // ------------------------------------------------------------------------------------------------------ // Vi börjar med att definiera konstanter för spelet. #define BOARD_SIZE 10 // Storleken på spelplanen. #define MARKERS_TO_WIN 5 // Antal pjäser i rad som krävs för att vinna. #define EMPTY_MARKER '-' // Bokstav som representerar en tom ruta på spelplanen. #define PLAYER_1_MARKER 'X' // Boksatav som representerar den första spelarens pjäser. #define PLAYER_2_MARKER 'O' // Boksatav som representerar den andra spelarens pjäser. // Vi definierar de olika lägen spellet kan befinna sig i. #define GAME_STATE_START_MENU 1 // Spelet kan vara i huvudmeny. #define GAME_STATE_HUMAN 2 // Det kan vara en människas tur att spela. #define GAME_STATE_COMPUTER 3 // Det kan vara en dators tur att spela. #define GAME_STATE_END 4 // Spelet är över. #define START_MENU_OPTION_MULTIPLAYER 1 // Vilken rad på menyn knappen för multiplayer ligger på. #define START_MENU_OPTION_SINGLEPLAYER 2 // Vilken rad på menyn knappen för singleplayer ligger på. // Deklarera Globala variabler som spelet använder. char currentGameState = GAME_STATE_START_MENU; // Variabel för nuvarande spelläge, spelet börjar på start menyn. char board[BOARD_SIZE][BOARD_SIZE]; // 2-Dimensionell array av bokstäver som representerar spelplanen, bokstäverna kan antingen vara "EMPTY_MARKER", "PLAYER_1_MARKER" eller "PLAYER_2_MARKER". int lastMarkerX, lastMarkerY; // Vi lagrar positionen för den senaste placerade spelpjäsen, därför att vi kan då enkalre testa om en spelare har vunnit. bool isMultiplayer; // Variabel som bestämmer om spelet är mot andra spelare eller mot datorn. char currentPlayer = PLAYER_1_MARKER; // Håller reda på vems tur det är, börjar på spelare ett. // Funktioner som spelet använder sig utav. void initBoard(); // Nollställa spelplanen. bool placeMarker(int x, int y, char marker); // Placera spelpjäs. void humanPlay(int x, int y); // Människans drag. bool computerPlay(char marker); // Datorns drag. bool checkWin(); // Kolla om senaste draget gjorde att spelaren vann. void gameRound(bool *done); // En runda på spelet. void startMenu(int y); // Startmeny. // Grafik funktioner. void printMenu(); // Skriv ut startmeny. void printBoard(); // Skriva ut spelplanen. void printVictory(); // Skriv ut vem som vann. // ------------------------------------------------------------------------------------------------------ // ---------------------- Huvudfunktionen som körs när programmet startas. ------------------------------ // ------------------------------------------------------------------------------------------------------ int main(){ initConsole(); // Ställer in konsollen för att hantera händelser. printMenu(); // Kolla om vi ska köra mot människa eller dator. printBoard(); // Ritar ut spelplanen. bool done = false; // Variabel som avgör om programmet ska avslutas. while (!done) { // Själva programloopen körs tills done är sant. eventHandler(); // Hanterar händelser som uppstår från användaren. gameRound(&done); // Kör En runda på spelet. } printVictory(); // Skriv ut vem som vann. system("pause"); // Pausa så att inte konsollen försvinner direkt. return 0; } // ------------------------------------------------------------------------------------------------------ // ---------------------- HÄNDELSE-KOD ------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------ // Läser in händelser som uppstår och vidarebefodrar dem till korrekt händelsehanterare. void eventHandler() { ReadConsoleInput(consoleInputHandle, eventInputBuffer, EVENT_BUFFER_SIZE, &nrOfEvents); // Hämtar händelser till bufferten: eventInputBuffer, och räknar antalet händelser till: nrOfEvents. for (int i = 0; i < nrOfEvents; i++) { // För varje händelse. switch (eventInputBuffer[i].EventType) { // Kolla vilken typ av händelse. case KEY_EVENT: // Om det är tangentbordstrckningar. keyboardEventHandler(eventInputBuffer[i].Event.KeyEvent); // Låt tangentbordshanteraren hantera händelsen. break; case MOUSE_EVENT: // Om det är tangentbordstrckningar. mouseEventHandler(eventInputBuffer[i].Event.MouseEvent); // Låt mushanteraren hantera händelsen. break; } } } // Tangentbordshändelsehanteraren hanterar knapptrckningar på tangentbordet. void keyboardEventHandler(KEY_EVENT_RECORD keyEvent) { if (!keyEvent.bKeyDown) { // Om vi släpper en tangent på skrivbordet. // Nu har vi inget som händer här, men här kan man lägga till flera händelser för att bygga vidare om man vill använda tangentbordet. } } // Mushändelsehanteraren hanterar knapptrckningar på musen. void mouseEventHandler(MOUSE_EVENT_RECORD mouseEvent) { if (mouseEvent.dwEventFlags == MOUSE_PRESSED_OR_RELEASED) { // Om musknappen trcks eller släpps. if (mouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED) { // Om det är vänstra musknappen. const int mousePosX = mouseEvent.dwMousePosition.X; // Hämta muspekarens X position i konsollen. const int mousePosY = mouseEvent.dwMousePosition.Y; // Hämta muspekarens Y position i konsollen. int col, row; switch (currentGameState) { // Kolla spelläge. case GAME_STATE_HUMAN: // Om det är spelarens tur. col = mousePosX / 2; // Vi måste räkna med att vi ritar ut spelplanen med mellanrum. row = mousePosY; // Inget mellanrum mellan rader. humanPlay(row, col); // Spela pjäsen på den tryckta positionen. break; case GAME_STATE_START_MENU: // Om vi är i startmenyn. startMenu(mousePosY); // Testa startmenyn. break; } } } } // Initiera konsollen genom att tillåta händelser och ta bort markören. void initConsole() { SetConsoleMode(consoleInputHandle, ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT); // Vi aktiverar händelser till konsol-fönstret. CONSOLE_CURSOR_INFO cursor; cursor.bVisible = false; cursor.dwSize = 1, // Skapa en ny onsynlig markör. SetConsoleCursorInfo(consoleOutputHandle, &cursor); // Aktivera den onsynliga markören till konsolen, så vi inte ser en blinkande markör. } // ------------------------------------------------------------------------------------------------------ // ---------------------- GRAFIK-KOD -------------------------------------------------------------------- // ------------------------------------------------------------------------------------------------------ // Skriva ut spelplanen. void printBoard() { for (int i = 0; i < BOARD_SIZE; i++) { // Gå igenom alla rader. for (int j = 0; j < BOARD_SIZE; j++) // Gå igenom alla kolumner. printf("%c ", board[i][j]); // Skriv ut spelmarkörerna på spelplannen. printf("\n"); // Byt rad. } } // Kolla om användaren vill spela mot en annan spelare, eller mot datorn. void printMenu() { printf("Select gamemode with left mouse button.\n");// Skriv ut val av spelläge. printf("Human vs human.\n"); // Skriv ut Alternativ 1, två spelare mot varandra. printf("Human vs computer.\n"); // Skriv ut Alternativ 2, spelare mot dator. } // Skriv ut vem som vann. void printVictory() { printf("Congratualtions Player %c, you won!\n", board[lastMarkerX][lastMarkerY]); } // Rensar skärmen void clearScreen() { system("cls"); // Rensar skärmen. initConsole(); // Konsollen måste tillåta händelser. } // ------------------------------------------------------------------------------------------------------ // ---------------------- SPEL-KOD ---------------------------------------------------------------------- // ------------------------------------------------------------------------------------------------------ // En runda av spelet. void gameRound(bool *done) { switch (currentGameState) { // Kolla vilket spelläge spelet är i. case GAME_STATE_HUMAN: // Människans spel hanteras separat av händelser. break; case GAME_STATE_COMPUTER: // Om det är datorns tur att spela. while (!computerPlay(currentPlayer)); // Låt datorn göra sitt drag. clearScreen(); // Rensa skärmen. printBoard(); // Rita ut spelplanen. currentPlayer = currentPlayer == PLAYER_1_MARKER ? PLAYER_2_MARKER : PLAYER_1_MARKER; // Här byter vi till nästa spelare. currentGameState = GAME_STATE_HUMAN; // låt människan spela. if (checkWin()) currentGameState = GAME_STATE_END; // Kolla om vinst. break; case GAME_STATE_END: // Om spelet är slut. *done = true; // Avsluta spelet. break; } } // Om människa försöker spela. void humanPlay(int x, int y) { if (currentGameState == GAME_STATE_HUMAN) { if (x >= 0 && x < BOARD_SIZE && y >= 0 && y < BOARD_SIZE) { // Försök endast placera om vi är innanför banan. if (placeMarker(x, y, currentPlayer)) { // Om placering lyckades. clearScreen(); // Rensa skärmen. printBoard(); // Rita ut spelplanen. currentPlayer = currentPlayer == PLAYER_1_MARKER ? PLAYER_2_MARKER : PLAYER_1_MARKER; // Här byter vi till nästa spelare. if (!isMultiplayer) currentGameState = GAME_STATE_COMPUTER; // Om det är singleplayer, låt datorn spela. if (checkWin()) currentGameState = GAME_STATE_END; // Kolla om vinst. } } } } // En dators tur att spela. Här kan man vidareutveckla en strategi åt datorn, nu kör den slumpvis. bool computerPlay(char marker) { int x, y; // Variabler Rad och kolumn som datorn vill placera sin pjäs på. x = rand() % BOARD_SIZE; // Datorn väljer en slupvis rad på spelplanen. y = rand() % BOARD_SIZE; // Datorn väljer en slupvis kolumn på spelplanen. return placeMarker(x, y, marker); // Placerar pjäsen på spelplanen. } // Placera spelpjäs. bool placeMarker(int x, int y, char marker) { if (board[x][y] != EMPTY_MARKER) return false; // Om det redan finns än pjäs på rutan, returnera falskt. (det gick ej att placera pjäsen). board[x][y] = marker; // Placera spelpjäsen på brädet. lastMarkerX = x; // Vi lägger undan raden för pjäsen i den globala variabeln för senast placerade pjäs rad position. lastMarkerY = y; // Vi lägger undan kolumnen för pjäsen i den globala variabeln för senast placerade pjäs kolumn position. return true; } // Nollställa spelplanen. void initBoard() { for (int i = 0; i < BOARD_SIZE; i++) // Gå igenom alla rader. for (int j = 0; j < BOARD_SIZE; j++) // Gå igenom alla kolumner. board[i][j] = EMPTY_MARKER; // Placera en tom markör på spelplanen. } // Testa att klicka på en rad i startmenyn. void startMenu(int y) { switch (y) { // Kolla rad som klickades på. case START_MENU_OPTION_MULTIPLAYER: // Om multiplayer är valt. currentGameState = GAME_STATE_HUMAN;// Gå över till spelläget. isMultiplayer = true; // Välj multiplayer. initBoard(); // Nollställa spelplanen. clearScreen(); // Rensa skärmen printBoard(); // Rita ut spelplanen. break; case START_MENU_OPTION_SINGLEPLAYER: // Om singleplayer är valt. currentGameState = GAME_STATE_HUMAN;// Gå över till spelläget isMultiplayer = false; // Välj singleplayer. initBoard(); // Nollställa spelplanen. clearScreen(); // Rensa skärmen printBoard(); // Rita ut spelplanen. break; } } // Kollar om den senaste placerade pjäsen gjorde att spelaren vann. bool checkWin() { char marker = board[lastMarkerX][lastMarkerY]; // Senaste spelarens spelpjäs. int left = 0, right = 0, up = 0, down = 0; // Antal likadana pjäser längs olika riktningar. int leftUp = 0, leftDown = 0, rightUp = 0, rightDown = 0; // Undersök vinst: vertikalt. for (int x = lastMarkerX; x >= 0; x--) { // Kolla alla pjäser upp. if (board[x][lastMarkerY] == marker) up++; // Om samma pjäs: öka antal pjäser i rad upp med ett. else break; // Om inte samma pjäs: sluta kolla åt upp. } for (int x = lastMarkerX; x < BOARD_SIZE; x++) { // Kolla alla pjäser ned. if (board[x][lastMarkerY] == marker) down++; // Om samma pjäs: öka antal pjäser i rad ned med ett. else break; // Om inte samma pjäs: sluta kolla åt ned. } if (up + down > MARKERS_TO_WIN) return true; // Om antal pjäser till upp och ned är störe än kravet för vinst (större eftersom mitten pjäsen räknas två gånger), då är det vinst och vi returnerar sant. // Undersök vinst: horisontellt. for (int y = lastMarkerY; y >= 0; y--) { // Kolla alla pjäser vänster. if (board[lastMarkerX][y] == marker) left++; // Om samma pjäs: öka antal pjäser i rad vänster med ett. else break; // Om inte samma pjäs: sluta kolla åt vänster. } for (int y = lastMarkerY; y < BOARD_SIZE; y++) { // Kolla alla pjäser höger. if (board[lastMarkerX][y] == marker) right++; // Om samma pjäs: öka antal pjäser i rad höger med ett. else break; // Om inte samma pjäs: sluta kolla åt höger. } if (left + right > MARKERS_TO_WIN) return true; // Om antal pjäser till höger och vänster är störe än kravet för vinst (större eftersom mitten pjäsen räknas två gånger), då är det vinst och vi returnerar sant. // Undersök vinst: diagonalt vänster-upp till höger-ned. for (int x = lastMarkerX, y = lastMarkerY; x >= 0 && y >= 0; x--, y--) { // Kolla alla pjäser vänster-upp. if (board[x][y] == marker) leftUp++; // Om samma pjäs: öka antal pjäser i diagonalen vänster-upp med ett. else break; // Om inte samma pjäs: sluta kolla åt diagonalen vänster-upp. } for (int x = lastMarkerX, y = lastMarkerY; x < BOARD_SIZE && y < BOARD_SIZE; x++, y++) { // Kolla alla pjäser höger-ned. if (board[x][y] == marker) rightDown++; // Om samma pjäs: öka antal pjäser i diagonalen höger-ned med ett. else break; // Om inte samma pjäs: sluta kolla åt diagonalen höger-ned. } if (leftUp + rightDown > MARKERS_TO_WIN) return true; // Om antal pjäser diagonalt vänster-upp till höger-ned är störe än kravet för vinst (större eftersom mitten pjäsen räknas två gånger), då är det vinst och vi returnerar sant. // Undersök vinst: diagonalt höger-upp till vänster-ned. for (int x = lastMarkerX, y = lastMarkerY; x >= 0 && y < BOARD_SIZE; x--, y++) { // Kolla alla pjäser höger-upp. if (board[x][y] == marker) rightUp++; // Om samma pjäs: öka antal pjäser i diagonalen höger-upp med ett. else break; // Om inte samma pjäs: sluta kolla åt diagonalen höger-upp. } for (int x = lastMarkerX, y = lastMarkerY; x < BOARD_SIZE && y >= 0; x++, y--) { // Kolla alla pjäser vänster-ned. if (board[x][y] == marker) leftDown++; // Om samma pjäs: öka antal pjäser i diagonalen vänster-ned med ett. else break; // Om inte samma pjäs: sluta kolla åt diagonalen vänster-ned. } if (rightUp + leftDown > MARKERS_TO_WIN) return true; // Om antal pjäser diagonalt höger-upp till vänster-ned är störe än kravet för vinst (större eftersom mitten pjäsen räknas två gånger), då är det vinst och vi returnerar sant. return false; // Ingen vinst har hittats, alltså returnerar vi falskt. }

Av gustavwth

Hej skrev ett litet exempel på ett 5 i rad.
Mer C än C++ men det borde hjälpa dig att förstå hur du kan göra ett enkelt 5 i rad.

Om man sammanfattar programmet.
Du behöver något att representera spelplanen, i detta fall t.ex. ett 2-Diemensionellt fält av karaktärer.
Du behöver kunna placera en pjäs, av två olika typer. X, O.
Du behöver kontrollera om en spelare vinner.
Du behöver en spelloop som ritar ut spelplanen på skärmen, samt tar hand om inmatningar från spelare.

I detta exemplet väljer datorspelaren sitt drag slumpvis, om du vill ha bättre motståndare får man tänka ut en strategi eller implementera någon befintlig algoritm, men jag tror det är utanför ramen för din uppgift.

Hoppas det är till någon hjälp.

// ------------------ // | Fem-I-Rad Spel | // ------------------ // Inkludera filer som används. #include <stdio.h> // printf, scanf_s (utmatning, inmatning) #include <stdlib.h> // srand, rand (slumpgenerator) #include <time.h> // time (klockan) // Vi börjar med att definiera konstanter för spelet. #define BOARD_SIZE 10 // Storleken på spelplanen. #define MARKERS_TO_WIN 5 // Antal pjäser i rad som krävs för att vinna. #define EMPTY_MARKER '-' // Bokstav som representerar en tom ruta på spelplanen. #define PLAYER_1_MARKER 'X' // Boksatav som representerar den första spelarens pjäser. #define PLAYER_2_MARKER 'O' // Boksatav som representerar den andra spelarens pjäser. // Deklarera Globala variabler som spelet använder. char board[BOARD_SIZE][BOARD_SIZE]; // 2-Dimensionell array av bokstäver som representerar spelplanen, bokstäverna kan antingen vara "EMPTY_MARKER", "PLAYER_1_MARKER" eller "PLAYER_2_MARKER". int lastMarkerX, lastMarkerY; // Vi lagrar positionen för den senaste placerade spelpjäsen, därför att vi kan då enkalre testa om en spelare har vunnit. // Funktioner som spelet använder sig utav. void initBoard(); // Nollställa spelplanen. void printBoard(); // Skriva ut spelplanen. bool placeMarker(int x, int y, char marker); // Placera spelpjäs. void playMultiplayer(); // Själva spelet för två spelare. void playSingleplayer(); // Själva spelet mot dator. bool humanTurn(char marker); // En mänsklig spelares drag. bool computerTurn(char marker); // Datorns drag. bool checkWin(); // Kolla om senaste draget gjorde att spelaren vann. bool checkMultiplayer(); // Kolla om användaren vill spela mot en annan spelare, eller mot datorn. // Huvudprogrammet, detta körs när programet startas. int main(){ printf("Welcome to 5-in-a-row!\n"); // Skriv ut välkomst text. srand(time(NULL)); // Initiera slumpgenerator från klockan. initBoard(); // Nollställer spelplanen. if (checkMultiplayer()) // Kolla om det ska vara multiplayer. playMultiplayer(); // Starta spelet för två spelare. else playSingleplayer(); // Annars starta spelet för en spelare. return 0; } // Kolla om användaren vill spela mot en annan spelare, eller mot datorn. bool checkMultiplayer() { char choice; // Bokstav för val som användaren anger. printf("Select gamemode:\n"); // Skriv ut val av spelläge. printf("1.) Human vs human.\n"); // Skriv ut Alternativ 1, två spelare mot varandra. printf("2.) Human vs computer.\n"); // Skriv ut Alternativ 2, spelare mot dator. printf("Your choice: "); // Skriv ut ange val. scanf_s("%c", &choice); // Låt användare skriva in sitt val. if (choice == '1') return true; // Om Alternativ 1, returnera sant return false; // Annars, returnara falskt. } // Själva spelet för två spelare. void playMultiplayer() { printBoard(); char currentPlayer = PLAYER_1_MARKER; // Variabel för den nuvarande spelaren som har sin tur att spela. bool done = false; // Variabel för att se om spelet är klart eller som det ska fortsätta. while (!done) { // När spelet inte är klart, fortsätt spela. printf("Player %c:s turn\n", currentPlayer); // Skriv ut vems tur att spela. while (!humanTurn(currentPlayer)); // Vi använder en loop, så om spelaren misslyckas med att välja en ruta får denne försöka igen. printBoard(); // Rita ut spelplanen. done = checkWin(); // Kolla om spelaren vann. currentPlayer = currentPlayer == PLAYER_1_MARKER ? PLAYER_2_MARKER : PLAYER_1_MARKER; // Här byter vi till nästa spelare. } printf("Congratualtions Player %c, you won!\n", board[lastMarkerX][lastMarkerY]); // Skriv ut vem som vann. } // En människas tur att spela. bool humanTurn(char marker) { int x, y; // Variabler Rad och kolumn som spelaren vill placera sin pjäs på. printf("Select location to place marker...\n"); // Skriver ut att spelaren ska välja var hon vill placera sin pjäs. printf("Enter row: "); // Skriver ut frågan om vilken rad spelaren vill placera på. scanf_s("%d", &x); // Låter spelaren skriva in vilken rad som den vill placera spelpjäsen på. printf("Enter column: "); // Skriver ut frågan om vilken kolumn spelaren vill placera på. scanf_s("%d", &y); // Låter spelaren skriva in vilken kolumn som den vill placera spelpjäsen på. return placeMarker(x, y, marker); // Placera pjäsen på spelplanen. } // Placera spelpjäs. bool placeMarker(int x, int y, char marker) { if (board[x][y] != EMPTY_MARKER) return false; // Om det redan finns än pjäs på rutan, returnera falskt. (det gick ej att placera pjäsen). board[x][y] = marker; // Placera spelpjäsen på brädet. lastMarkerX = x; // Vi lägger undan raden för pjäsen i den globala variabeln för senast placerade pjäs rad position. lastMarkerY = y; // Vi lägger undan kolumnen för pjäsen i den globala variabeln för senast placerade pjäs kolumn position. return true; } // Skriva ut spelplanen. void printBoard() { printf(" "); // Skriv ut tomma mellanslag för att snygga till. for (int i = 0; i < BOARD_SIZE; i++) printf("%2d", i); // Skriv ut nummer för kolumnerna. for (int i = 0; i < BOARD_SIZE; i++) { // Gå igenom alla rader. printf("\n%2d ", i); // för varje rad på spelplanen, skriv ut en ny rad, och skriv ut nummer för raderna. for (int j = 0; j < BOARD_SIZE; j++) // Gå igenom alla kolumner. printf("%c ", board[i][j]); // Skriv ut spelmarkörerna på spelplannen. } printf("\n"); // Byt rad. } // Nollställa spelplanen. void initBoard() { for (int i = 0; i < BOARD_SIZE; i++) // Gå igenom alla rader. for (int j = 0; j < BOARD_SIZE; j++) // Gå igenom alla kolumner. board[i][j] = EMPTY_MARKER; // Placera en tom markör på spelplanen. } // Kollar om den senaste placerade pjäsen gjorde att spelaren vann. bool checkWin() { char marker = board[lastMarkerX][lastMarkerY]; // Senaste spelarens spelpjäs. int left = 0, right = 0, up = 0, down = 0; // Antal likadana pjäser längs olika riktningar. int leftUp = 0, leftDown = 0, rightUp = 0, rightDown = 0; // Undersök vinst: vertikalt. for (int x = lastMarkerX; x >= 0; x--) { // Kolla alla pjäser upp. if (board[x][lastMarkerY] == marker) up++; // Om samma pjäs: öka antal pjäser i rad upp med ett. else break; // Om inte samma pjäs: sluta kolla åt upp. } for (int x = lastMarkerX; x < BOARD_SIZE; x++) { // Kolla alla pjäser ned. if (board[x][lastMarkerY] == marker) down++; // Om samma pjäs: öka antal pjäser i rad ned med ett. else break; // Om inte samma pjäs: sluta kolla åt ned. } if (up + down > MARKERS_TO_WIN) return true; // Om antal pjäser till upp och ned är störe än kravet för vinst (större eftersom mitten pjäsen räknas två gånger), då är det vinst och vi returnerar sant. // Undersök vinst: horisontellt. for (int y = lastMarkerY; y >= 0; y--) { // Kolla alla pjäser vänster. if (board[lastMarkerX][y] == marker) left++; // Om samma pjäs: öka antal pjäser i rad vänster med ett. else break; // Om inte samma pjäs: sluta kolla åt vänster. } for (int y = lastMarkerY; y < BOARD_SIZE; y++) { // Kolla alla pjäser höger. if (board[lastMarkerX][y] == marker) right++; // Om samma pjäs: öka antal pjäser i rad höger med ett. else break; // Om inte samma pjäs: sluta kolla åt höger. } if (left + right > MARKERS_TO_WIN) return true; // Om antal pjäser till höger och vänster är störe än kravet för vinst (större eftersom mitten pjäsen räknas två gånger), då är det vinst och vi returnerar sant. // Undersök vinst: diagonalt vänster-upp till höger-ned. for (int x = lastMarkerX, y = lastMarkerY; x >= 0 && y >= 0; x--, y--) { // Kolla alla pjäser vänster-upp. if (board[x][y] == marker) leftUp++; // Om samma pjäs: öka antal pjäser i diagonalen vänster-upp med ett. else break; // Om inte samma pjäs: sluta kolla åt diagonalen vänster-upp. } for (int x = lastMarkerX, y = lastMarkerY; x < BOARD_SIZE && y < BOARD_SIZE; x++, y++) { // Kolla alla pjäser höger-ned. if (board[x][y] == marker) rightDown++; // Om samma pjäs: öka antal pjäser i diagonalen höger-ned med ett. else break; // Om inte samma pjäs: sluta kolla åt diagonalen höger-ned. } if (leftUp + rightDown > MARKERS_TO_WIN) return true; // Om antal pjäser diagonalt vänster-upp till höger-ned är störe än kravet för vinst (större eftersom mitten pjäsen räknas två gånger), då är det vinst och vi returnerar sant. // Undersök vinst: diagonalt höger-upp till vänster-ned. for (int x = lastMarkerX, y = lastMarkerY; x >= 0 && y < BOARD_SIZE; x--, y++) { // Kolla alla pjäser höger-upp. if (board[x][y] == marker) rightUp++; // Om samma pjäs: öka antal pjäser i diagonalen höger-upp med ett. else break; // Om inte samma pjäs: sluta kolla åt diagonalen höger-upp. } for (int x = lastMarkerX, y = lastMarkerY; x < BOARD_SIZE && y >= 0; x++, y--) { // Kolla alla pjäser vänster-ned. if (board[x][y] == marker) leftDown++; // Om samma pjäs: öka antal pjäser i diagonalen vänster-ned med ett. else break; // Om inte samma pjäs: sluta kolla åt diagonalen vänster-ned. } if (rightUp + leftDown > MARKERS_TO_WIN) return true; // Om antal pjäser diagonalt höger-upp till vänster-ned är störe än kravet för vinst (större eftersom mitten pjäsen räknas två gånger), då är det vinst och vi returnerar sant. return false; // Ingen vinst har hittats, alltså returnerar vi falskt. } // En dators tur att spela. bool computerTurn(char marker) { int x, y; // Variabler Rad och kolumn som datorn vill placera sin pjäs på. x = rand() % BOARD_SIZE; // Datorn väljer en slupvis rad på spelplanen. y = rand() % BOARD_SIZE; // Datorn väljer en slupvis kolumn på spelplanen. return placeMarker(x, y, marker); // Placerar pjäsen på spelplanen. } // Själva spelet mot dator. void playSingleplayer() { printBoard(); char currentPlayer = PLAYER_1_MARKER; // Variabel för den nuvarande spelaren som har sin tur att spela. bool done = false; // Variabel för att se om spelet är klart eller som det ska fortsätta. while (!done) { // När spelet inte är klart, fortsätt spela. printf("Player %c:s turn\n", currentPlayer); // Skriv ut vems tur att spela. if (currentPlayer == PLAYER_1_MARKER) // Kolla om människas tur. while (!humanTurn(currentPlayer)); // Vi använder en loop, så om spelaren misslyckas med att välja en ruta får denne försöka igen. else // Annars är det datorns tur. while (!computerTurn(currentPlayer)); printBoard(); // Rita ut spelplanen. done = checkWin(); // Kolla om spelaren vann. currentPlayer = currentPlayer == PLAYER_1_MARKER ? PLAYER_2_MARKER : PLAYER_1_MARKER; // Här byter vi till nästa spelare. } if (board[lastMarkerX][lastMarkerY] == PLAYER_1_MARKER) // Kolla om spelaren vann. printf("Congratualtions, you won!\n"); // Skriv ut vinst-text. else // Annars vann datorn. printf("To bad, you loose!\n"); // Skriv ut förlust-text. }

Av gustavwth

Kanske är ett problem med DHCP?
Har du testat att binda en statisk IP-adress till datorns MAC-adress i routern?
Anslut sedan datorn genom att konfigurera den statiska IP-adressen i datorn och välj att inte ansluta med DHCP.

Av gustavwth
Skrivet av janee:

Nu vet jag ej hur vanligt det är med Damaged Blocks på Kingston V300 SSD men det är känt att Kingston använder sämre Nand minnen i V300 http://www.nordichardware.se/SSD-Recensioner/nya-kingston-v30...

Jag har 2st Samsung 830 och båda är helt felfria, här är testet på den som är mest använd, Drifttid 9171 timmar och Total skrivning 5321 GB
http://i.imgur.com/uln75sb.png

Om det är normalt med Damaged blocks så borde även jag ha några på någon av mina 2 SSD, tyvärr vet jag ej om det går att göra något för åtgärda felen förutom att kontakta butiken eller Kingston och byta ut SSDn.

Jag har den äldre modellen (505A), är flera år gammal.

Av gustavwth

trasig ssd? hd tune pro resultat för Kingston 120gb

Hej
Mitt Windows låste sig vid boot och jag kunde inte logga in, fastnade i Windows automatiska reparation om och om igen. Testade flera olika saker men inget lyckades, men till slut formaterade jag om ssd-disken och installerade ett nytt Windows 8.1. Fungerade ett par dagar innan jag nu fått samma fel igen, har nu installerat om Windows ännu en gång, temporärt på en annan hårddisk för att felsöka innan jag beslutar om jag måste ersätta någon komponent.

Har kört diagnostik för processorn och minnet, vilket inte hittade några fel för att utesluta dem.
Har även testat att uppdatera firmware på ssd-enheten.
Misstänkte att det var ssd-enheten som är trasig eller håller på att gå sönder så körde HD Tune Pro Error Scan.

SSD: Kingston SSD Now v300 120gb (sv300s37a120G)

Resultat från HD Tune Pro Error Scan:

http://snag.gy/8w24b.jpg

Är disken trasig och måste ersättas eller går det att åtgärda?

Av gustavwth

Hej,
jag har inte programmerat något till FLIS tidigare men kanske detta kan vara till någon hjälp ändå?

T1 FCB $10, %10, 10 //skapar en sträng som tar 3platser $hex, %bin, dec E1 10 //10hex är 10hex E2 02 //02hex är 10binärt E3 0A //0Ahex är 10decimalt EQU tar inte upp plats i programminnet, den ger bara en "ettikett/namn" till ett tal. STA ,-X E4 E8 //instruktionen har OP : E8 (kollade i databladet)

Hittade ett datablad, antar att det är denna processor det handlar om?

Av gustavwth

Vi gör en statisk metod för att räkna ut genomsnittet (addera alla tal sedan dividera med antal tal).
ett fält (array) beskrivs med [], och vi har ett fält med flyttal (double) som inparameter. vi använder längd attributet length för att ta reda på antal element i fältet. Sedan returnerar vi svaret.

private static double genomsnitt(double[] tal){ return (tal[0] + tal[1] + tal[2]) / tal.length; }

i huvud metoden skapar vi först en referens till ett fält, och sedan tilldelar vi det en ny fält instans med 3 element med nyckelordet "new" för att den ska få en plats i minnet. Fältet börjar på element 0. Vi tilldelar sedan varje element ett värde. Nästa steg är att anropa genomsnitt metoden och tilldela det till en ny variabel . Vi anropar funktionen genom att skriva dess namn och ge dess inparameter inom parenteser. Slutligen anropar vi en standard utskriftsfunktion och ger vårat flyttal som inparameter.

public static void main(String[] args) { double[] tal = new double[3]; tal[0] = 4.3; tal[1] = 2.2; tal[2] = 8.6; double genomsnittet = genomsnitt(tal); System.out.print(genomsnittet); }

Av gustavwth

Hej
Först och främst kan vi förklara vad en Klass är, tänk att det är som en mall som kan innehålla variabler och funktioner. När vi har skrivit våran klass kan vi sedan skapa många instanser av den, de kallas objekt och har varsin egen uppsättning av innehållet i klassen. Men dock kan man med hjälp av nyckelordet Static få alla objekt som är instanser av klassen innehålla samma instans av t.ex variabeler/funktioner som man vill ska vara gemensamt för varje objekt.

Vi skapar klassen Medlem, som vi förklarar public, det innebär att den är tillgänglig överallt.

I klassen skapar vi två privata medlemmar "namn" och "id" som vi gör privata så att endast klassen själv har tillgänglighet till dem.

Sedan har vi Konstruktorn som har uppgiften att skapa objekt av klassen när den anropas. Konstruktorn har samma namn som klassen, vi gör den public så att alla kan skapa instanser av klassen .
Konstruktorn tar två inparametrar med samma namn som variablerna i klassen. Variablerna i klassen har samma namn som inparametrarna, vilket innebär att vi behöver använda nyckelordet "this" som refererar till det nuvarande objektet (Medlem) för att kunna initiera variablerna i klassen.

set och get är standard för komma åt data i klassen, man kombinerar med variabelnamnet med stor bokstav. Anledningen för att man använder set och get funktioner är att kapsla in data och ge större kontroll över hur klassen används. Du kan äv t.ex. lägga till felhantering, så den "kastar" fel om du försöker placera in felaktig data, med "throw".
set returnerar värdet void (inget), och get ska returnera det som söks, i detta fall String.

public class Medlem { private String namn; private String id; public Medlem(String namn, String id) { this.namn = namn; this.id = id; } public void setNamn(String namn) { this.namn = namn; } public String getNamn() { return namn; } public void setId(String id) { this.id = id; } public String getId() { return id; } }

Saker att tänka på: när du har variabel för ID i en klass bör du på något vis kontrollera så att konstruktorn aldrig kan ge en ID till en nytt objekt som redan existerar i ett annat objekt. Detta kan göras på olika sätt men eftersom du vill att användaren ska kunna ändra på ID i efterhand görs det kanske lättast med en statisk lista av alla ID i klassen, som kollas i konstruktorn och setID nekar användaren om den försöker skapa två objekt med samma ID.

hoppas det var till någon hjälp

Av gustavwth

Hej
Vart du bör börja beror på vad du vill åstadkomma. Om du relativt snabbt vill komma igång och skapa spel skulle jag rekommendera att använda en befintlig spelmotor, det gör att du kommer igång snabbare och kan se resultat direkt.

För att komma igång snabbt
Unity är en spelmotor som är ett bra val för nybörjare och har många möjligheter. Men det kommer kräva kunskaper i programmering i språket C# eller något av de andra språken de stödjer (Javascript/Boo).
C# är Microsofts programmeringsspråk och är smidigt att bygga Windowsapplikationer med, det är också ett ganska bra språk att lära sig programmera i allmänt, eftersom det liknar Java och är objektorienterat och du kan gå vidare till andra språk senare. Tillsammans med Unity kommer du kunna bygga spel till flertalet plattformar.
Blender är ett program för att modellera 3D och animera, det är gratis och är tillräckligt kraftfullt för det mesta. (Har även en inbyggd spelmotor om du inte vill använda t.ex. Unity.)

Övrigt
Om du vill använda en annan spelmotor finns det många för C++, men även andra språk, här är en lista.

Om du vill lära dig att utveckla spelmotorer rekommenderar jag att du lär dig C/C++, eftersom det är princip standard för detta ändamål och ger snabb kod. C++ används i dom flesta spel och är mycket bra att lära sig om man vill syssla med spelutveckling. Du kan använda t.ex. OpenGL för att få grafik, eller DirectX om du riktar dig mot windows.

Annars kan det vara bra att börja med en lärobok om programmering om du börjar med C++, även om det finns mycket resurser för att lära sig på internet kan det vara trevligt med en bok.

Lycka till

Av gustavwth

Här är en gratis wikibok X86_Disassembly, som inkluderar ett avsnitt om olika disassembler och decompilers.

Av gustavwth

Förslag till funktion för att testa en liten stege, kräver att du endast har en av varje av talen 1...5.

int ladder(int* dieValues){ for (int i=1;i<6;i++)if(dieValues[i]!=1)return 0; return 1; }

Gjorde ett litet test program för att prova funktionen.

#include <stdio.h> #include <stdlib.h> #include <time.h> void rollDice(int* dieValues, int rolls); int ladder(int* dieValues); void setZero(int* dieValues); int main(){ srand(time(NULL)); int dieValues[7]={0}; int num =0; while (ladder(dieValues) == 0){ setZero(dieValues); rollDice(dieValues, 5); num++; } printf("You took %d rolls to get the correct ladder.\n", num); return 0; } void rollDice(int* dieValues, int rolls){ for (int i=0;i<rolls;i++)dieValues[rand()%6+1]++; printf("Dice roll with %d die:\nOne\tTwo\tThree\tFour\tFive\tSix\n%d\t%d\t%d\t%d\t%d\t%d\t\n",rolls, dieValues[1], dieValues[2], dieValues[3], dieValues[4], dieValues[5], dieValues[6]); } int ladder(int* dieValues){ for (int i=1;i<6;i++)if(dieValues[i]!=1)return 0; return 1; } void setZero(int* dieValues){ for (int i=1;i<7;i++)dieValues[i]=0; }

Av gustavwth

Hej
Jag har själv ägt tre olika e-bok-läsare, Asus eee-note, en tysk no-name läsare, och kobo aura hd. Har även testat någon annan modell.

Asus eee-note är en bra enhet, men inte fulländad. Min gick dock sönder och den säljs inte längre, så det är ingen idé att gå in vidare på den.

Rekommenderar att inte köpa en billig enhet, som en omdöpt no-name enhet lik de som säljs på Cd-on och Netonnet, upplever att de inte håller måttet med usla skärmar.

Kobo Aura hd är den klart bästa enligt mitt tycke.
Den har skarp och tydlig skärm med hög upplösning med variabel ljusstyrka från sidorna. Den är kompatibel med många format, dock inte mobi. Pdf och epub är dock de enda format jag utnyttjar och dessa klarar den bra.

Epub fungerar galant, snabb inläsning av sidor och har flera olika inställningar för typsnitt och storlek.
Det är en fröjd att läsa böcker med Aura hd och jag föredrar att läsa skönlitteratur på denna enhet över tryckt dito, det enda jag kan klaga på är att det kan bli tröttsamt för lillfingret om du läser under en lång period med ena handen och vilar enheten på lillfingret.

Pdf klarar aura hd, men något långsammare än epub. Den klarar att visa större sidor utan att kräva förstoring på grund av skärmupplösningen, men det blir liten text så man förstorar ändå. Har bland annat läst inscannade matematik och programmeringsböcker som pdf och det fungerar bra, men inte samma känsla som en tryckt bok. Den klarar även att visa högupplösta bilder, dock i svartvitt och ganska långsamma laddningstider.

Nämnvärt är kindle, de har paperwhite som är en ganska bra enhet, men enligt mig inte lika bra som kobos Aura hd.
Snart lanserar Amazon sin nya enhet Kindle Voyage, som ser ut att bli riktigt bra. Den kommer ha en högre upplösning men något mindre storlek, 6" mot 6.8" på aura hd. Jag upplever det är en smakfråga vilken av Aura hd och Kindle Voyage som är det bästa valet, och rekommenderar dig att kolla på dessa enheter främst.

Lycka till

Av gustavwth

Hej här är lite hjälp, jag är dock nybörjare i java.

Som teknocide sa, ta bort extend.
Flytta konton ut från bank logiken in till kund, eftersom kunderna vill ha flera konton och det blir lättare att hålla reda på dem.
Då har du en sådan struktur: En lista innehåller alla kunder, och varje kund har varsin lista som innehåller kundens alla konton.

Flera funktioner behövde anpassas för att kunna anropas.

Här är ett exempel på något som borde kunna köras, men har inte all funktionalitet inbyggd som måste läggas till:

BankLogic.java

// Beskrivning: (Innehåller en lista med alla inlagda kunder. Klassen ska innehålla ett //antal publika metoder som hanterar kunder och dess konton.) // Version: (1) //****************************************************************** import java.util.ArrayList; //public class BankLogic extends SavingsAccount{ public class BankLogic{ //Deklarerar arraylistan som ska innehålla kunder public ArrayList<Customer>customers; //konstruktor som instansierar arraylistan public BankLogic(){ super(); customers=new ArrayList<>(); } //------------------------------------------------------ //Beskrivning: (Returnerar en sträng med alla bankens kunder) //Inparametrar: (pNr och namn) //Returvärde: (Returnerar en sträng med alla bankens kunder) //------------------------------------------------------ public String infoBank(){ String info =""; for(Customer customer:customers)info += customer.getCustomer()+"\n"; return info; } //------------------------------------------------------ // Beskrivning: (Skapar ny kund med pNr och name) // Inparametrar: (Kund ska endast skapas om inte pNr finns.) // Returvärde: (True om det lyckats annars false) //------------------------------------------------- public boolean addCustomer(String name,long pNr){ for(Customer customer:customers){ if (pNr==customer.pNr) return false; } customers.add(new Customer(name, pNr)); return true; } //------------------------------------------------------ // Beskrivning: (Returnerar sträng med presentation av vald kund(pNr+namn och eventuella konton)) // Inparametrar: (pNr) // Returvärde: (pNr+namn och eventuella konton) //------------------------------------------------------ // public String infoCustomer(long pNr){ for(Customer customer:customers){ if (customer.getpNr()==pNr){ String info = customer.getCustomer(); for(SavingsAccount account:customer.accounts){ info += account.getAccount()+"\n"; } return info; } } return "Ingen kund med det personnummret."; } //------------------------------------------------------ // Beskrivning: (Tar bort kund med personnummer pNr ur banken, alla kundens eventuella konton tas //också bort och resultatet returneras. Strängen som returneras ska ha innehålla //information om vilka konton som togs bort, saldot som kunden får tillbaka samt vad //räntan blev) // Inparametrar: (pNr) // Returvärde: (info om borttagen kunds konto) //------------------------------------------------------ public String removeCustomer(long pNr){ for(Customer customer:customers){ if(customer.getpNr()==pNr){ String info = customer.getCustomer(); customers.remove(customer); int total = 0; for(SavingsAccount account:customer.accounts){ info += account.getAccount()+"\n"; total += account.balance; } return "Kund borttagen: "+info+"\n Saldo total: "+total; } }return null; } //------------------------------------------------------ // Beskrivning: (Skapar ett konto till kund med personnummer pNr) // Inparametrar: (pNr) // Returvärde: (returnerar kontonumret som det //skapade kontot fick alternativt returneras –1 om inget konto skapades) //------------------------------------------------------ public int addSavingsAccount(long pNr){ for(Customer customer : customers){ if (customer.getpNr()==pNr){ SavingsAccount newaccount = new SavingsAccount(); customer.accounts.add(newaccount); return newaccount.accountid; } } return -1; } //------------------------------------------------------ // Beskrivning: (Byter namn på kund med rätt personnummer pNr till nytt name) // Inparametrar: (pNr) // Returvärde: (returnerar true om namnet ändrades annars returnerar false) //------------------------------------------------------ public boolean changeCustomerName(String name,long pNr){ for(Customer customer:customers) //ifsats för att kolla om customers pnr är lika som det sökta if (customer.getpNr()==pNr){ customer.setName(name); return true; } return false; } //------------------------------------------------------ //Beskrivning: (Gör en insättning på konto med kontonnummer accountId som tillhör kunden pNr) //Inparametrar: (long pNr,int accountid,double amount) //Returvärde: (returnerar true om det gick bra annars false) //------------------------------------------------------ public boolean deposit(long pNr,int accountId,double amount){ for(Customer customer : customers){ if (customer.pNr==pNr){ for (SavingsAccount account:customer.accounts){ if(account.accountid == accountId){ account.balance+=amount; return true; } } } } return false; } //------------------------------------------------------ //Beskrivning: (Gör ett uttag på konto med kontonnummer accountId som tillhör kunden pNr) //Inparametrar: (long pNr,int accountId,int amount) //Returvärde: (returnerar true om det gick bra annars false) //------------------------------------------------------ public boolean withdraw(long pNr,int accountId,int amount){ for(Customer customer : customers){ if (customer.pNr==pNr){ for (SavingsAccount account:customer.accounts){ if(account.accountid == accountId){ if (account.balance>=amount){ account.balance-=amount; return true; } else return false; } } } } return false; } //------------------------------------------------------ //Beskrivning: (Returnerar en String som innehåller presentation av kontot med kontonnummer //accountId som tillhör kunden pNr (kontonummer, saldo, kontotyp, räntesats) //Inparametrar: (long pNr,int accountId) //Returvärde: (Returnerar en String som innehåller presentation av kontot med kontonnummer //accountId som tillhör kunden pNr (kontonummer, saldo, kontotyp, räntesats) //------------------------------------------------------ //------------------------------------------------------ // Beskrivning: (Stänger ett konto med kontonnummer accountId som tillhör kunden pNr, // Inparametrar: (long pNr ,int accountId) // Returvärde: (presentation av kontots saldo samt ränta på pengarna ska genereras.) //------------------------------------------------------ public String closeAccount(long pNr ,int accountId){ for(Customer customer:customers){ if (customer.pNr == pNr) { for (SavingsAccount account:customer.accounts){ if (account.accountid == accountId){ String info = account.getAccount(); customer.accounts.remove(account); return "Kontot avslutat."+info; } } } } return "Kontot existerar inte."; }

SavingsAccount.java

// Beskrivning: (hanterar följande information: saldo, räntesats, kontotyp (Sparkonto) och kontonummer //Man kan utföra transaktioner (insättning/uttag), hämta kontonummer, //beräkna ränta (saldo * räntesats/100) samt presentera kontot (kontonummer, saldo, kontotyp, //räntesats). // Version: (1) //****************************************************************** public class SavingsAccount{ double balance; double rate=2; String accounttype="Sparkonto"; int accountid; static int accountcounter=1001; double amount; //konstruktor public SavingsAccount(){ this.accountid=getAccountId(); this.balance= 0; this.rate= rate; this.accounttype = accounttype; } public double getBalance(){ return balance; } public String getAccounttype(){ return accounttype; } public int getAccountId(){ accountid=accountcounter; accountcounter++; return accountid; } public double getRate(){ return rate; } public String getAccount(){ return accounttype+" Kontoid: "+accountid+" Saldo: "+balance+" Ränta: "+rate; } @Override public String toString(){ return "Kontotyp:"+getAccount()+""; } public double rateInAccount(){ return balance+=(balance*rate)/100; } public double withdraw(double balance){ if(balance>0){ return balance-=amount; } return 0; } public double deposit(double balance){ if(balance>0){ return balance+=amount; } return 0; } }

Customer.java

import java.util.ArrayList; // Beskrivning: (Hanterar följande information: kundens namn, personnummer. //Man kan till exempel kunna ändra kundens namn samt presentera kunden (personnummer, //för- och efternamn samt kundens konton). Dessutom kan man kunna hantera konton) // Version: (1) //****************************************************************** //Klassen Customer //public class Customer extends SavingsAccount{ public class Customer{ public ArrayList<SavingsAccount>accounts; //variabler för att hålla namn och persnr String name; long pNr; //konstruktor som ska hämta upp namn och personnr public Customer(String name,long pNr){ this.name=name; this.pNr=pNr; this.accounts=new ArrayList<>(); } //konstruktor public Customer() { super(); accounts=new ArrayList<>(); } //------------------------------------------------------ //Beskrivning: (getmetod för att hämta namn på kund) //Inparametrar: (name) //Returvärde: (name) //------------------------------------------------------ public String getName(){ return name; } //------------------------------------------------------ //Beskrivning: (getmetod för att hämta personnr=pNr på kund) //Inparametrar: (pNr) //Returvärde: (pNr) //------------------------------------------------------ public long getpNr(){ return pNr; } //Beskrivning: (Setmetod för namn) //Inparametrar: (name) //Returvärde: (name) //------------------------------------------------------ public void setName(String Name){ name=Name; } //Beskrivning: (Getmetod för namn och personnr) //Inparametrar: (name pnr) //Returvärde: (name pnr) //------------------------------------------------------ public String getCustomer(){ return "Name:"+getName()+"Personalnumber:"+getpNr(); } //Beskrivning: (Metod för att göra om objektet till en sträng) //Inparametrar: (namn och pnr) //Returvärde: (kundinformationen omgjort till sträng) //Här fick jag hjälp av ett foruminlägg som jag fick fram genom att googlade varför jag bara fick fram //konstiga tecken när jag skulle skriva ut konton. //http://stackoverflow.com/questions/3615721/how-to-use-the-tostring-method-in-java. //------------------------------------------------------ @Override public String toString(){ return ""+getCustomer()+""; } }

Annat att tänka på sedan, nu är mycket byggt med public, och anropas direkt. Det kan vara trevligt med mer skyddade variabler och ha funktionsanrop för att läsa/skriva.

lycka till

Av gustavwth

Du kan dela upp uppgiften i tre delar.
1.) Hämta dagens datum
2.) Läsa in input från användaren
3.) Testa om värdena är lika

Nu har jag aldrig kodat något i java tidigare, men här är ett kodexempel:

import java.util.*; // bibliotek som innehåller date, scanner m.m. public class Datum{ public static void main(String []args) { // 1.) Hämta dagens datum och tilldela månad och dag till varsin int med hjälp av date och kalender Date date = new Date(); Calendar cal = Calendar.getInstance(); cal.setTime(date); int month = cal.get(Calendar.MONTH)+1; int day = cal.get(Calendar.DAY_OF_MONTH); // 2.) Läsa in månadsnummer och dagnummer från användaren med scanner Scanner scan = new Scanner(System.in); System.out.println("Skriv in ett månadsnummer: "); int month_in = scan.nextInt(); System.out.println("Skriv in ett dagnummer inom månaden: "); int day_in = scan.nextInt(); scan.close(); // 3.) Testa om de är lika med en if sats if (month == month_in && day == day_in) { System.out.println("Datumet är korrekt"); } else { System.out.println("Datumet är inkorrekt"); } } }

Av gustavwth
Skrivet av Guffa_Harley:

sjunkit in nu. spilled milk. jag har lärt mig massor denna gången och nästa gubbe klarar det

nån som har en superenkel stream-guide?

Om du vill använda OBS (Gratis, öppen källkod, funkar med twitch.tv)

Download:
https://github.com/jp9000/OBS/releases/download/0.613b/OBS_0_...
Guide:
http://obsproject.com/forum/threads/official-overview-guide.4...

Har dock inte använt det själv men tror det är bra.

Craftade förövrigt en ny kastyxa, den blev ganska bra faktiskt.

http://i.imgur.com/R1Z5a45.jpg

Av gustavwth

Tjena
Stormshield? Tror du kommer klara detta!
Blev inspirerad av tråden och ville testa och se hur långt jag kommer. har kört genom normal nu på en kast barbar.
Något jag borde tänka på som kast barbar när man kör på detta vis?

Här kör jag cow level:

Nu blir det att kötta igenom nightmare härnäst.

Av gustavwth

Hej
Om du har:
en textbox: inbox,
en textbox: utbox,
en knapp: b1

private void b1_Click_1(object sender, EventArgs e) { int x = Convert.ToInt32(inbox.Text); double y = x * 6.6; utbox.Text = y.ToString(); }