KANSAS CITY, Mo. - Lorenzo Cain had a huge night and wanted more.

Cain went 4 for 4 with a home run and Yordano Ventura pitched six scoreless innings as the Kansas City Royals defeated the Detroit Tigers 6-1 on Tuesday.

Needing a triple in his final at-bat to complete the cycle, Cain sliced a single to right field and was out trying to stretch it into a double in the eighth inning.

"I wanted it bad," Cain said about the cycle. "(Jarrod) Dyson definitely reminded me before I went up to hit. I was looking to drive a ball to right-centre or right field somewhere. Unfortunately I didn't hit it hard enough to get it to the gap. I ended up sliding in for a single."

Cain, who raised his average to .316, led off the sixth with his 12th homer, a mammoth shot to left field.

"It felt amazing," he said. "It was a curveball. They've definitely been throwing me a lot of off speed lately, far more than I've ever seen in my life. I was trying to adjust and stay on it, wait back. I was definitely sitting on off speed there. I ended up putting a good swing on it and it went out of the park."

Mike Moustakas snapped an 0-for-18 drought with a homer to right with Kendrys Morales aboard in the same inning.

Ventura (7-7), who is 3-1 since the All-Star break, limited the Tigers to two hits but walked a career-high six. He struck out eight, matching his season high.

"Ventura wasn't crazy wild," Royals manager Ned Yost said. "He was not missing by much. He stayed confident, stayed calm and continued to make pitches."

Eric Hosmer hit a two-run homer in the first, giving him 21 RBIs in the opening inning.

Anibal Sanchez (10-10) yielded all three homers, bringing his season total to 28 — tied for most in the American League. Sanchez yielded only 13 homers combined in the past two seasons.

"I don't know what to say about it," Sanchez said. "I don't know what's happened. I don't get rattled. I just give up the home runs."

Moustakas also stroked a run-scoring single in the eighth for his third three-RBI game of the year.

The Tigers snapped a season-worst 17-inning scoreless drought with a run in the seventh against reliever Franklin Morales. Pinch-hitter Rajai Davis' sacrifice fly scored Jefry Marte, who led off with a double.

Luke Hochevar worked 2 2-3 spotless innings for his first save since Aug. 8, 2013, against Boston.

DEFENSIVE DANDIES

The Royals made five defensive gems, including throwing out James McCann at the plate when he attempted to score on Marte's double to deep left-centre. "I was surprised," Yost said. "I didn't think they had a chance to get him. I was shocked they did. When Dyson made a good throw to Esky (shortstop Alcides Escobar), I still didn't think they had a chance. The defence was just spectacular tonight."

TRAINER'S ROOM

Tigers: 1B Miguel Cabrera (left calf strain) took batting practice and could come off the disabled list this weekend for a series at Houston.

Royals: C Salvador Perez left after seven innings with inflammation in his sore wrist, which has been bothering him for a few days, manager Ned Yost said. . RHP Wade Davis (stiff back) has not pitched since Thursday.

UP NEXT

Tigers: Rookie LHP Daniel Norris makes his third start since being acquired in a trade with the Blue Jays.

Royals: RHP Edinson Volquez, who is 1-3 with a 4.98 ERA in four career starts against Detroit, draws the assignment for the series finale.