DS will be 3 on Sunday and is really rough at times. At times it seems like he can't control his happiness/excitement, for example when we are playing silly with him (particularly with DH) and he is really enjoying it, he will just out of nowhere strike your face/hit you/scratch/headbutt. We tell him no and stop the game immediately, but this has been going on for over a year now and we are really struggling to know what to do.
We've tried naughty step, ignoring, time out, removal of something, pre-emptively warning, over the top praise for good behaviour....he never seems to learn. This evening, I was mucking around with him singing this silly song that makes us laugh, and he was really enjoying it and then out of the blue he just head butted me and really made my mouth and gums bleed. To my shame, I gave him a nasty smack on the hand and left quite a nasty mark and shouted at him loudly but simply that that's nasty and had hurt Mummy - he was quite upset. I really don't want to repeat this behaviour, I don't like or agree with smacking but it just shocked me and hurt a lot, I also know telling him not to hit or smack and then doing it is completely non sensical.
In addition to this, on occasion, he can be very rough to usually younger children. He pushes them over, seemingly when jealous. It's usually when he's with me and DH and another child intervenes, soft play/parks we have to be on complete red alert. He seems to think everything belongs to him, he screams at other children for touching "his" stuff - but it's not his! The park is not his! Even things that do belong to him, I want him to share, other children his age seem to share so well and it makes play dates very stressful to the point I avoid them. 
As background info, he does have a speech delay but is now at the stage where he can communicate most things he wants. He goes to nursery 2 mornings a week and they say they have never seen him behave like this.
I would really appreciate any thoughts or ideas anyone has as it's really getting me down and I don't want to loose control as I did this evening. I'm also 31 weeks pregnant and worried about him with the baby although I would obviously not leave them alone.