Looking for a tutorial to make a scoreboard for my table hockey game

Arduino newbie here, I have a good bit of experience in programming but I'm new to the electronics side of things, I want to make a scoreboard for my rod hockey table game.

I'm aiming for a fairly simple set up, in the middle of the table, either off to the side or suspended above center ice there would be a box housing my Arduino Uno along with 4 segment LED displays to show the score, 2 on each side of the box so both players can see the scores. There would be a small speaker of some sort as well inside the box, and a push button for each player at the end of the board, when the player pushes their button, the goal horn sounds and their score increases by one.

Pretty sure this is all doable with Arduino, does anyone know a good tutorial that shows how to do this or at least parts of this?

Thanks!

Use MAX7219 to drive common cathode display.
Make it 8 digits and have a countdown timer too.
MAX7219 controls the display, you only need to send it an register number & data to display. Very easy.
Here's a very little card I offer that does the same. Can find larger versions easily enough.
From arduino you connect it to +5, Gnd, SCK, MOSI, CS, or use a library that fakes those in software.

Big portions of the code needed:

void setup(){

pinMode (busyPin, INPUT_PULLUP);
pinMode (ssPin, OUTPUT);
SPI.begin();
// MAX7219 setup:
MAX7219setup();

// Update display
numberDisplay(); // send to display
commandDisplay(); // send to display


} // end setup
void numberDisplay(){
// send data to 'screen'
digitalWrite (ssPin, LOW);
SPI.transfer(8); // address
SPI.transfer(fontArray[songLower]);
digitalWrite (ssPin, HIGH);
digitalWrite (ssPin, LOW);
SPI.transfer(7); // address
SPI.transfer(fontArray[songMiddle]);
digitalWrite (ssPin, HIGH);
digitalWrite (ssPin, LOW);
SPI.transfer(6); // address
SPI.transfer(fontArray[songUpper]);
digitalWrite (ssPin, HIGH);
}

void commandDisplay(){
// send to display
digitalWrite (ssPin, LOW);
SPI.transfer(5); // address
SPI.transfer(fontArray[commandArray[4]]);
digitalWrite (ssPin, HIGH);
digitalWrite (ssPin, LOW);
SPI.transfer(4); // address
SPI.transfer(fontArray[commandArray[3]]);
digitalWrite (ssPin, HIGH);
digitalWrite (ssPin, LOW);
SPI.transfer(3); // address
SPI.transfer(fontArray[commandArray[2]]);
digitalWrite (ssPin, HIGH);
digitalWrite (ssPin, LOW);
SPI.transfer(2); // address
SPI.transfer(fontArray[commandArray[1]]);
digitalWrite (ssPin, HIGH);
digitalWrite (ssPin, LOW);
SPI.transfer(1); // address
SPI.transfer(fontArray[commandArray[0]]);
digitalWrite (ssPin, HIGH);
}

void MAX7219setup(){
// MAX7219 setup:
// shutdown mode
digitalWrite (ssPin, LOW);
SPI.transfer(0x0C);
SPI.transfer(0);
digitalWrite (ssPin, HIGH);

// scan register, 8 digits
digitalWrite (ssPin, LOW);
SPI.transfer(0x0B);
SPI.transfer(0x07);
digitalWrite (ssPin, HIGH);

// no decode mode
digitalWrite (ssPin, LOW);
SPI.transfer(0x09);
SPI.transfer(0);
digitalWrite (ssPin, HIGH);

// display test off
digitalWrite (ssPin, LOW);
SPI.transfer(0x0F);
SPI.transfer(0);
digitalWrite (ssPin, HIGH);

// intensity
digitalWrite (ssPin, LOW);
SPI.transfer(0x0A);
SPI.transfer(7); // 1/2 bright
digitalWrite (ssPin, HIGH);

// all done, normal mode
digitalWrite (ssPin, LOW);
SPI.transfer(0x0C);
SPI.transfer(1);
digitalWrite (ssPin, HIGH);
}

Replace my 8 pieces of data with the 8 you want to display: 4 for score, 4 for time.