Add a function that returns the winner(s) with most eggs found and call it when game is ended.
address[] public players;
mapping(address => bool) private hasParticipated;
function searchForEgg() external returns (string memory searchStatus) {
require(gameActive, "Game not active");
require(block.timestamp >= startTime, "Game not started yet");
require(block.timestamp <= endTime, "Game ended");
if (!hasParticipated[msg.sender]) {
hasParticipated[msg.sender] = true;
players.push(msg.sender);
}
uint256 random =
uint256(keccak256(abi.encodePacked(block.timestamp, block.prevrandao, msg.sender, eggCounter))) % 100;
if (random < eggFindThreshold) {
eggCounter++;
eggsFound[msg.sender] += 1;
eggNFT.mintEgg(msg.sender, eggCounter);
emit EggFound(msg.sender, eggCounter, eggsFound[msg.sender]);
}
}
function getWinners() external view returns (address[] memory winners, uint256 maxEggs) {
uint256 highest = 0;
uint256 playerCount = players.length;
uint256 winnerCount = 0;
for (uint256 i = 0; i < playerCount; i++) {
uint256 count = eggsFound[players[i]];
if (count > highest) {
highest = count;
}
}
for (uint256 i = 0; i < playerCount; i++) {
if (eggsFound[players[i]] == highest && highest > 0) {
winnerCount++;
}
}
address[] memory tempWinners = new address[](winnerCount);
uint256 index = 0;
for (uint256 i = 0; i < playerCount; i++) {
if (eggsFound[players[i]] == highest && highest > 0) {
tempWinners[index] = players[i];
index++;
}
}
return (tempWinners, highest);
}