for a battleship program:how to place a ship of given unit length randomly on a matrix of 10x10?
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
roshan varkey
le 26 Nov 2013
Commenté : Andrés Leonardo Mogollón Benavides
le 27 Avr 2020
i have to make a program for the game battleship (computer vs user) and i made a matrix and ships of different unit lengths:
play_board=zeros(10); disp(play_board) destroyer=[2,2]; submarine=[31,31,31] cruise=[32,32,32] battleship=[4,4,4,4] aircraft_carrier=[5,5,5,5,5]
now i would like to randomly place these on the matrix and i dont know how...i am an absolute beginner and would appreciate help!thankyou
0 commentaires
Réponse acceptée
Image Analyst
le 26 Nov 2013
Modifié(e) : Image Analyst
le 26 Nov 2013
You need to know the starting (upper left) row and column (row1 and col1), and the direction. Maybe you can get it like this:
row1 = randi(size(play_board, 1),1,1);
col1 = randi(size(play_board, 2),1,1);
direction = randi(2, 1, 1); % 1 for vertical, 2 for horizontal.
Of course you need to make sure it fits within the play board for the type of ship you're trying to place, and need to make sure it does not cross any existing ships.
For vertical placement of a submarine:
row2 = row1 + length(submarine) - 1;
col2 = col1;
play_board(row1:row2, col1) = submarine(1);
For horizontal placement of a battleship:
col2 = col1 + length(battleship) - 1;
row2 = row1;
play_board(row1, col1:col2) = battleship(1);
4 commentaires
Image Analyst
le 26 Nov 2013
The first lines just get a random location to try to put one end of the ship. For example, 6,3 or whatever. And it gets a direction, 1 or 2, that says how you should decide whether the ship is vertical or horizontal. Now the other end of the ship is at a different location, right? OK, so how should you decide where that other end is? If we're lying totally in row 3, and one end is at column 5 and the length was 3, then it should occupy columns 5,6, & 7, right? So 5+5-1 = 7, and that is the second column. Then when you say array(row1, col1:col2) = someNumber, it will set all elements in row1 going from col1 to col2 (inclusive) to a value of "someNumber". The number I set it to was the number you assigned to the ship. Does that explain it? Of course there is still stuff left for you to do, for example decide which ship you're going to place, and then once all the ships are placed, how to guess a location and keep track of hits and misses.
Andrés Leonardo Mogollón Benavides
le 27 Avr 2020
Hi, i have a same project and i wonder. after the program place a random ship into the matrix, how to make sure that the second ship not cross the last one.
i'll apreciate any tip
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Marine and Underwater Vehicles dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!